피드로 돌아가기
The most powerful pattern in TypeScript, Discriminated Unions
Dev.toDev.to
Frontend

Optional Property 지옥 탈출, TypeScript Discriminated Unions 설계 전략

The most powerful pattern in TypeScript, Discriminated Unions

Darren Hwang2026년 4월 6일4intermediate

Context

상태 관리를 위해 하나의 거대한 객체에 Optional Property를 사용하는 방식의 한계. 데이터와 에러가 동시에 존재하는 불가능한 상태(Impossible States) 발생 가능성. 런타임 안정성을 위해 반복적인 null 체크와 non-null assertion이 강제되는 구조.

Technical Solution

  • 공통 리터럴 타입의 속성을 가진 Discriminant를 정의하여 각 상태를 명확히 구분하는 설계
  • Union 타입을 활용해 서로 배타적인 상태 멤버들을 하나의 타입으로 결합하는 방식
  • Switch 문이나 If 문을 통한 타입 가드 적용으로 컴파일러가 자동으로 타입을 좁히는 Type Narrowing 메커니즘 활용
  • never 타입을 이용한 Exhaustiveness Checking 구현으로 모든 상태 처리 여부를 컴파일 타임에 검증하는 전략
  • 상태별로 필요한 데이터만 정의하여 특정 상태에서 존재하지 않는 속성에 대한 접근을 원천 차단하는 구조

Key Takeaway

타입 시스템을 통해 비즈니스 로직의 상태 전이를 명시적으로 정의함으로써 런타임 오류를 컴파일 타임으로 전이시키는 설계 원칙.


복잡한 상태 머신 설계 시 Optional Property 대신 Discriminated Unions와 never 타입을 결합한 완전성 검사 구조를 도입할 것

원문 읽기