string·number·boolean부터 배열·튜플·any·unknown·리터럴 타입과 타입 추론까지 익힌다.
기본 타입
TypeScript의 출발점은 값에 타입을 붙이는 일입니다. 기본 타입들을 알면 대부분의 변수를 정확하게 표현할 수 있습니다. 여기서는 가장 자주 쓰는 타입들을 한 번에 둘러봅니다.
학습 목표
- 원시 타입(string/number/boolean)을 선언할 수 있다.
- 배열과 튜플의 차이를 안다.
any와unknown의 차이를 이해한다.- 리터럴 타입과 타입 추론을 활용한다.
원시 타입
가장 기본이 되는 세 가지 타입입니다. 변수 이름 뒤에 : 타입 으로 표기합니다.
let name: string = '민수';
let age: number = 20;
let isAdmin: boolean = false;
number 는 정수와 실수를 모두 포함합니다. 별도의 int/float 구분은 없습니다.
타입 추론
타입을 항상 직접 적을 필요는 없습니다. 초깃값이 있으면 TypeScript가 자동으로 타입을 추론합니다.
let city = '서울'; // string으로 추론
city = 123; // ❌ number는 넣을 수 없음
💡 TIP — 초깃값으로 충분히 추론되는 변수에는 타입을 생략하는 편이 깔끔합니다. 함수의 매개변수·반환값처럼 추론이 안 되는 곳에 명시하세요.
배열
배열은 두 가지 방법으로 표기합니다. 둘은 완전히 같은 의미입니다.
let scores: number[] = [90, 85, 100];
let names: Array<string> = ['민수', '영희'];
튜플
튜플은 길이와 각 위치의 타입이 고정된 배열입니다.
let point: [number, number] = [10, 20];
let pair: [string, number] = ['age', 30];
pair = [30, 'age']; // ❌ 순서가 맞지 않음
좌표나 [키, 값] 쌍처럼 구조가 정해진 데이터에 유용합니다.
any 와 unknown
any 는 타입 검사를 사실상 끄는 타입입니다. 무엇이든 허용하지만, 그만큼 안전성을 잃습니다.
let data: any = '문자열';
data.foo.bar(); // 오류 안 남 → 런타임에 터질 수 있음
unknown 은 "타입을 아직 모른다"는 안전한 버전입니다. 쓰기 전에 타입을 확인해야만 사용할 수 있습니다.
let value: unknown = getInput();
value.toUpperCase(); // ❌ 먼저 확인이 필요
if (typeof value === 'string') {
value.toUpperCase(); // ✅ string임이 확인됨
}
| 타입 | 특징 |
|---|---|
any | 검사 없음. 가능하면 피하기 |
unknown | 안전. 사용 전 타입 확인 강제 |
⚠️ 주의 —
any를 남발하면 TypeScript를 쓰는 의미가 사라집니다. "정말 타입을 모를 때"는any대신unknown을 쓰세요.
null 과 undefined
strict 모드에서는 null 과 undefined 가 다른 타입에 함부로 섞이지 못합니다. 가능성을 유니온으로 명시해야 합니다.
let nickname: string | null = null;
nickname = '민수'; // OK
리터럴 타입
특정한 값만 허용하는 타입입니다. 정해진 선택지를 표현할 때 강력합니다.
let direction: 'up' | 'down' | 'left' | 'right';
direction = 'up'; // OK
direction = 'top'; // ❌ 허용된 값이 아님
number 리터럴도 가능합니다.
let dice: 1 | 2 | 3 | 4 | 5 | 6;
요약
- 원시 타입은
string,number,boolean. - 배열은
T[]또는Array<T>, 튜플은 위치·타입이 고정된 배열. any는 검사를 끄므로 피하고, 모를 땐unknown.strict에서는null/undefined를 유니온으로 명시한다.- 리터럴 타입으로 "정해진 값"만 허용할 수 있다.
- 초깃값이 있으면 타입 추론에 맡기는 것이 깔끔하다.
댓글 0
“TypeScript” 강좌에 대한 댓글입니다.