Skip to content

기본 타입 (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 = "문자열";
unknownany와 유사하지만 사용 전 타입 검사 필요let input: unknown = 5;
void함수가 값을 반환하지 않을 때 사용function log(): void {}
never정상적으로 끝나지 않는 함수의 반환 타입function error(): never { throw new Error(); }

🧩 anyunknown의 차이

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만 할당할 수 있음