타입스크립트 분배 조건부 타입
21 Aug 2025 | typescriptBFE.dev 사이트의 타입스크립트 챌린지를 풀면서 새롭게 알게 된 개념들을 정리합니다.
TypeScript 조건부 타입에서 중요한 규칙 중 하나는
조건부 타입이 유니언 타입에 대해 자동으로 분배(distribute) 된다는 점이다.
📌 기본 형태
T extends U ? X : Y
여기서 T가 유니언 타입 (A | B | C)
이라면,
조건부 타입은 각 멤버별로 나눠서 평가된다.
즉:
(A | B | C) extends U ? X : Y
는 다음처럼 분배된다.
(A extends U ? X : Y) |
(B extends U ? X : Y) |
(C extends U ? X : Y)
📌 분배를 막는 방법
분배가 항상 원하는 동작은 아닐것이다.
만약 T 전체가 E에 속하는지를 한 번에 체크하고 싶다면,
[T]처럼 튜플로 감싸
주면 분배가 일어나지 않는다.
type NoDistribute<T, E> = [T] extends [E] ? never : T
✅ 정리
-
조건부 타입에서 T가 유니언이면 멤버별로 분배된다. (반복문처럼 각 멤버를 순회하면서 조건을 적용한다)
-
이를 분배 조건부 타입(Distributive Conditional Types) 이라고 한다.
-
분배를 원하지 않을 때는 [T] extends [U]로 튜플 감싸기를 활용한다.
-
Exclude, Extract, NonNullable 등 여러 유틸리티 타입이 이 규칙을 기반으로 한다.