개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

기본 타입 — TypeScript가 다루는 값의 종류

2025년 11월 6일
TypeScriptPrimitive Types타입배열튜플

TypeScript의 타입은 크게 기본 타입(Primitive Types)과 객체 타입(Object Types)으로 나뉩니다. 기본 타입은 값 자체가 타입의 전부인 단순한 값이고, 객체 타입은 여러 값을 담는 구조입니다.

기본 타입

string

텍스트 값입니다.

let name: string = "철수";
let greeting: string = `안녕하세요, ${name}`;

number

정수와 실수를 구분하지 않습니다. 모든 숫자가 number 타입입니다.

let age: number = 30;
let pi: number = 3.14;
let hex: number = 0xff;

boolean

true 또는 false입니다.

let isLoggedIn: boolean = true;
let hasError: boolean = false;

null과 undefined

null은 값이 없음을 명시적으로 나타내고, undefined는 값이 아직 할당되지 않은 상태입니다.

let empty: null = null;
let notAssigned: undefined = undefined;

tsconfig.json에서 strictNullChecks를 활성화하면 null과 undefined를 다른 타입에 할당하는 것을 막습니다. 이 설정 없이는 string 변수에도 null을 넣을 수 있어서 오류를 놓치기 쉽습니다. strict 모드를 켜면 자동으로 활성화됩니다.

symbol

유일하고 변경 불가능한 값입니다. 객체 프로퍼티의 키로 충돌 없이 사용할 수 있습니다.

const id: symbol = Symbol("id");

bigint

number로 표현할 수 없는 큰 정수를 다룰 때 사용합니다.

const big: bigint = 9007199254740991n;

배열

배열의 타입은 두 가지 방식으로 표기합니다.

// 방식 1: 타입[]
const names: string[] = ["철수", "영희"];

// 방식 2: Array<타입>
const scores: Array<number> = [95, 87, 72];

두 방식은 동일합니다. string[]이 더 간결해서 자주 쓰입니다.

튜플

고정된 길이와 각 위치의 타입이 정해진 배열입니다. 파이썬의 튜플과 달리 TypeScript 튜플은 수정(변경)이 가능합니다.

// [string, number] — 첫 번째는 string, 두 번째는 number
const entry: [string, number] = ["철수", 30];

entry[0]; // string
entry[1]; // number
entry[2]; // 오류: 인덱스 2는 존재하지 않습니다

API 응답이나 함수에서 여러 값을 반환할 때 유용합니다.

function getUser(): [string, number] {
  return ["철수", 30];
}

const [userName, userAge] = getUser();

객체 타입

프로퍼티의 이름과 타입을 명시합니다.

const user: { name: string; age: number } = {
  name: "철수",
  age: 30,
};

프로퍼티가 많아지면 인라인 표기가 길어집니다. 이 경우 interface나 type으로 분리합니다. 이에 대해서는 별도 글에서 다루겠습니다.

특수 타입

any

타입 검사를 완전히 끕니다. TypeScript를 쓰는 이유를 무력화하므로 최대한 피해야 합니다.

let value: any = "문자열";
value = 42;        // 오류 없음
value.foo();       // 오류 없음 — 런타임에서 터질 수 있음

unknown

any처럼 어떤 값이든 받을 수 있지만, 사용하기 전에 반드시 타입을 좁혀야 합니다. any보다 안전한 대안입니다.

let input: unknown = "문자열";

// input.toUpperCase(); // 오류: 타입을 확인하지 않으면 사용 불가

if (typeof input === "string") {
  input.toUpperCase(); // 정상
}

never

절대 발생할 수 없는 값의 타입입니다. 항상 예외를 던지는 함수나 무한 루프, 또는 모든 경우가 처리되었을 때 남은 타입으로 나타납니다.

function throwError(message: string): never {
  throw new Error(message);
}

void

반환값이 없는 함수의 반환 타입입니다.

function log(message: string): void {
  console.log(message);
  // return; 또는 return undefined; 가능
}

리터럴 타입

특정 값만 허용하는 타입을 만들 수 있습니다.

let direction: "left" | "right" | "up" | "down";
direction = "left";  // 정상
direction = "back";  // 오류: '"back"'은 이 타입에 할당할 수 없습니다

let statusCode: 200 | 404 | 500;
statusCode = 200;  // 정상
statusCode = 201;  // 오류

리터럴 타입(Literal Type): 특정 값 자체를 타입으로 사용하는 기능. 문자열, 숫자, boolean 값 모두 리터럴 타입으로 쓸 수 있습니다.

기본 타입을 정확히 이해하면 TypeScript 타입 시스템의 나머지 기능들을 쌓아올리기 쉬워집니다. 특히 any 대신 unknown을 쓰는 습관이 타입 안전성을 크게 높여줍니다.

← 이전 글상태와 불변성 — 예측 가능한 변경을 만드는 방법
다음 글 →타입 어노테이션과 타입 추론 — 명시와 추론의 균형