기본 타입 (Basic Types)
🧩 타입 주석 (Type Annotation)
TypeScript의 핵심은 변수나 함수에 타입을 명시적으로 지정하는 것이다.
이러한 명시적 타입 표기를 타입 주석이라고 한다.
ts
let text: string = 'Hello';
let count: number = 42;
let isDone: boolean = true;
let nothing: null = null;
let notDefined: undefined = undefined;
let anything: any = '유연하게';
let union: string | number = 'hello';타입 주석은 명시적 타입 지정, 컴파일 시점 오류 탐지, 자동완성 개선 등의 장점을 제공한다.
https://objectcomputing.com/resources/publications/sett/typescript-the-good-parts
기본 타입은 크게 원시 타입(Primitive Types)과 특수 타입(Special Types)으로 나눌 수 있다.
원시 타입(Primitive Types)
| 타입 | 설명 | 예시 코드 |
|---|---|---|
string | 문자열 | let name: string = "Binny"; |
number | 정수, 소수, 음수, 지수 표현 모두 가능 | let age: number = 25; |
boolean | 참/거짓 값 | let isOpen: boolean = true; |
null | 개발자가 의도적으로 값이 없음을 표현 | let empty: null = null; |
undefined | 값이 아직 할당되지 않은 상태 | let notDefined: undefined; |
symbol | 고유하고 변경 불가능한 값을 만들 때 사용 | let id: symbol = Symbol("id"); |
bigint | 아주 큰 정수를 다룰 때 사용 | let big: bigint = 100n; |
특수 타입(Special Types)
| 타입 | 설명 | 예시 코드 |
|---|---|---|
any | 모든 타입 허용 (타입 검사에서 제외) | let flexible: any = "문자열"; |
unknown | any와 유사하지만 사용 전 타입 검사 필요 | let input: unknown = 5; |
void | 함수가 값을 반환하지 않을 때 사용 | function log(): void {} |
never | 정상적으로 끝나지 않는 함수의 반환 타입 | function error(): never { throw new Error(); } |
🧩 any와 unknown의 차이
any는 어떤 값이든 자유롭게 사용할 수 있지만, 타입 검사를 건너뛰기 때문에 TypeScript의 장점을 잃을 수 있다.
반면 unknown은 어떤 값이든 받을 수 있지만, 사용하기 전에 타입을 확인해야 하므로 더 안전하다.
ts
let value: unknown = 'hello';
// unknown 타입은 바로 문자열 메서드를 사용할 수 없다.
// console.log(value.toUpperCase()); // Error
// 먼저 값의 타입을 확인해야 한다.
if (typeof value === 'string') {
console.log(value.toUpperCase()); // 'HELLO'
}리터럴 타입 (Literal Types)
리터럴 타입은 기본 타입을 더 구체적으로 제한할 때 사용한다.
특정 값을 타입처럼 사용하는 방식으로, 예를 들어 10, 'hello', true처럼 하나의 값만 허용하도록 타입을 제한할 수 있다.
ts
let direction: 'left' = 'left';
direction = 'right'; // Error: 'left'만 할당할 수 있음
let statusCode: 200 = 200;
statusCode = 404; // Error: 200만 할당할 수 있음
let isVisible: true = true;
isVisible = false; // Error: true만 할당할 수 있음