리터럴을 유니언으로 결합하기
리터럴 타입을 유니언으로 결합해 유한한 값 집합을 만듭니다.
리터럴을 유니언으로 결합하기은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
리터럴 타입의 유니온
리터럴의 유니온은 값이 미리 알려진 여러 선택지 중 정확히 하나여야 함을 표현합니다. 상태 머신, 열거형, 타입이 잘 지정된 API의 핵심 기반입니다.
type Status = 'idle' | 'loading' | 'success' | 'error';
let state: Status = 'idle';
state = 'loading';
console.log('State:', state);리터럴 유니온으로 분기하기
리터럴 유니온에 switch를 사용하면 코드가 명확하게 읽히고, 컴파일러는 각 경우가 허용된 값 중 하나임을 알 수 있습니다. 모든 경우 처리 검사와 특히 잘 어울립니다.
type Status = 'idle' | 'loading' | 'done';
function label(s: Status): string {
switch (s) {
case 'idle': return 'Waiting';
case 'loading': return 'Working';
case 'done': return 'Finished';
}
}
console.log(label('loading'));모든 경우 처리
유니온의 모든 멤버를 처리하는 것을 모든 경우를 빠짐없이 처리하는 방식이라고 합니다. 모든 경우를 다루면 TypeScript는 누락된 분기 없이 함수가 항상 반환된다는 것을 증명할 수 있습니다.
type Dir = 'left' | 'right';
function step(d: Dir): number {
if (d === 'left') return -1;
return 1; // only 'right' remains
}
console.log(step('left'), step('right'));never로 모든 경우 처리 검사하기
default 분기에서 값을 never에 할당하면, 새로운 유니온 멤버를 추가하고 처리를 빠뜨렸을 때 컴파일 오류가 발생합니다. 이는 코드가 발전할 때 안전망 역할을 합니다.
type Shape = 'circle' | 'square';
function area(s: Shape): string {
switch (s) {
case 'circle': return 'pi r^2';
case 'square': return 'a^2';
default:
const _exhaustive: never = s;
return _exhaustive;
}
}
console.log(area('circle'));const 객체에서 유니온 도출하기
값을 const 객체에 보관하고 typeof obj[keyof typeof obj]를 사용해 그 값에서 유니온을 도출하는 방식이 흔히 사용됩니다. 하나의 진실 공급원으로 두 가지 결과를 얻는 방법입니다.
const Colors = { Red: 'red', Blue: 'blue' } as const;
type Color = typeof Colors[keyof typeof Colors];
// 'red' | 'blue'
const c: Color = Colors.Blue;
console.log(c);키에서 유니온 도출하기
keyof typeof obj를 사용하면 키의 유니온도 도출할 수 있습니다. 키 자체가 의미 있는 식별자일 때 유용합니다.
const ICONS = { home: 0, search: 1, profile: 2 } as const;
type IconName = keyof typeof ICONS;
// 'home' | 'search' | 'profile'
const name: IconName = 'search';
console.log(name, ICONS[name]);리터럴 태그를 사용한 판별 유니온
각 객체 변형에 리터럴 태그 속성을 추가하면 TypeScript가 서로 구분할 수 있습니다. 태그를 확인하면 정확한 객체 형태로 타입이 좁혀집니다.
type Action =
| { type: 'add'; amount: number }
| { type: 'reset' };
function reduce(a: Action): number {
if (a.type === 'add') return a.amount;
return 0;
}
console.log(reduce({ type: 'add', amount: 5 }));판별자로 타입 좁히기
리터럴 판별자를 확인하고 나면 컴파일러가 어떤 변형인지 알 수 있으므로, 형 변환 없이도 해당 변형만의 필드에 안전하게 접근할 수 있습니다.
type Event =
| { kind: 'click'; x: number; y: number }
| { kind: 'key'; code: string };
function handle(e: Event): string {
if (e.kind === 'key') return 'Key ' + e.code;
return 'Click ' + e.x + ',' + e.y;
}
console.log(handle({ kind: 'key', code: 'Esc' }));여러 유니온 결합하기
이름이 지정된 작은 유니온을 조합해 더 큰 유니온을 만들 수 있습니다. 이렇게 하면 서로 관련된 선택지를 그룹으로 묶어 코드베이스 전체에서 재사용할 수 있습니다.
type Primary = 'red' | 'blue' | 'yellow';
type Secondary = 'green' | 'orange';
type Color = Primary | Secondary;
const c: Color = 'green';
console.log(c);함수 제약 조건으로 사용하는 유니온
리터럴 유니온을 함수에 전달하면 호출자가 유효한 선택지만 사용하도록 제한하고 편집기 자동 완성도 제공할 수 있습니다. 안전성과 탐색 가능성을 함께 제공하는 이 조합은 매우 강력합니다.
type Align = 'left' | 'center' | 'right';
function setAlign(a: Align): void {
console.log('Aligned', a);
}
setAlign('center');
// setAlign('top'); // Error리터럴 유니온이 문자열보다 나은 이유
일반적인 string 매개변수는 오타를 포함해 어떤 값이든 허용합니다. 리터럴 유니온은 컴파일 시점에 실수를 찾아내고 유효한 선택지를 문서화하므로, 유지 관리 가능한 코드를 위한 분명한 개선입니다.
type Method = 'GET' | 'POST' | 'PUT' | 'DELETE';
function request(m: Method, url: string): void {
console.log(m, url);
}
request('POST', '/api/users');빠른 확인
리터럴 유니온에 대한 이해도를 확인해 보십시오.
복습: 리터럴 결합하기
다음 방법을 배웠습니다.
- 유한한 선택지 집합을 위해 리터럴의 유니온을 만듭니다.
never를 활용해 안전하게 모든 경우를 빠짐없이 처리합니다.keyof typeof와typeof obj[keyof typeof obj]를 사용해 const 객체에서 유니온을 도출합니다.- 리터럴 태그 속성으로 변형을 구분합니다.
다음 과정에서는 특별한 unknown, never, void 타입을 살펴봅니다.
const ROUTES = { home: '/', about: '/about' } as const;
type Route = typeof ROUTES[keyof typeof ROUTES];
const r: Route = '/about';
console.log(r);자주 묻는 질문
“리터럴을 유니언으로 결합하기” 강의는 무료인가요?
네 — “리터럴을 유니언으로 결합하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“리터럴을 유니언으로 결합하기”에서 뭘 배우나요?
리터럴 타입을 유니언으로 결합해 유한한 값 집합을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“리터럴을 유니언으로 결합하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 문자열 및 숫자 리터럴 타입
- 불리언 리터럴과 리터럴 추론
- as const를 사용한 const 단언
- 리터럴을 유니언으로 결합하기