Discriminated Unions
Published at 2025-07-22
TIL - Discriminated Unions
날짜: 2025년 7월 22일
Discriminated Unions
식별자 속성을 가진 타입들의 유니언이다.
설명으로 보면 무슨 말인지 바로 파악이 어려울 수 있는데, 예시를 보면 이해가 쉽다.
type Shape =
| { kind: "circle"; radius: number }
| { kind: "square"; x: number }
| { kind: "triangle"; x: number; y: number }; kind 라는 공통 필드(=식별자=discriminant)를 가진 Shape 타입이 Discriminated Unions이다.
아래 area함수에서처럼 kind 속성으로 type narrowing이 가능하다.
function area(s: Shape) {
if (s.kind === "circle") {
return Math.PI * s.radius * s.radius;
} else if (s.kind === "square") {
return s.x * s.x;
} else {
return (s.x * s.y) / 2;
}
} Discriminated Unions의 조건
- 공통된 필드 이름(kind, type, status등)이 있음
- 필드의 값은 고정된 문자열 리터럴