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등)이 있음
  • 필드의 값은 고정된 문자열 리터럴