TypeScript기본 타입과 좁히기

union과 literal 타입

여러 가능성을 하나의 타입으로 묶는 union과 값 자체를 타입으로 쓰는 literal 타입의 핵심을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

ts
type Status = "idle" | "loading" | "success" | "error";

설명

  • union 타입은 값이 여러 타입 중 하나일 수 있음을 표현합니다. 예를 들어 number | string은 숫자이거나 문자열입니다.
  • literal 타입은 string 전체가 아니라 "success" 같은 특정 값 하나만 허용하는 타입입니다.
  • 둘을 결합하면 상태값, 모드, 옵션처럼 가능한 값 집합이 제한된 API를 매우 명확하게 표현할 수 있습니다.
  • 이 방식은 문자열을 아무거나 받는 코드보다 안전하며, 자동완성과 오타 방지에도 큰 도움이 됩니다.
  • 다만 union을 받는 값은 사용 전에 어떤 경우인지 확인해야 하므로, 다음 단계로 narrowing이 거의 항상 따라옵니다.

짧은 예제

ts
type Theme = "light" | "dark";

function setTheme(theme: Theme) {
  console.log(theme);
}

setTheme("light");

빠른 정리

표현의미
number | string숫자 또는 문자열
"on" | "off"두 문자열 중 하나
literal 타입값 자체를 타입으로 사용
장점오타 방지, 자동완성, 상태 표현 강화
다음 단계사용 전 narrowing 필요

주의할 점

union을 선언했다고 해서 모든 멤버의 메서드를 바로 쓸 수 있는 것은 아닙니다. 공통으로 보장되는 부분만 바로 접근할 수 있고, 나머지는 먼저 경우를 좁혀야 합니다.

참고 링크

1 sources