TypeScript-섹션9. 조건부 타입- 분산적인 조건부 타입(1)

손주완·2025년 7월 15일

Typescript Section9

목록 보기
1/3

분산적인 조건부 타입

✅ 선요약

  • 조건부 타입에 유니온 타입을 넣으면 각 요소에 대해 조건이 개별로 평가되는 분산 조건부 타입이 작동함.
  • 이를 이용해 Exclude, Extract 등 다양한 유틸리티 타입을 직접 구현 가능함.

조건부 타입 복습

type StringNumberSwitch<T> = T extends number ? string : number;

let a: StringNumberSwitch<number>;  // string
let b: StringNumberSwitch<string>;  // number

분산 조건부 타입의 등장

type StringNumberSwitch<T> = T extends number ? string : number;

let c: StringNumberSwitch<number | string>; 
// 결과: string | number

❓ 왜 이런 결과가 나옴?

  • 조건부 타입의 타입 변수에 Union 타입이 들어가면, 조건이 각 요소별로 분리되어 평가됨.
  • 이를 분산 조건부 타입이라 함.

분산 과정:

  1. 타입 분해:
StringNumberSwitch<number>     // string
StringNumberSwitch<string>     // number
  1. 결과 결합:
string | number

Exclude 조건부 타입 구현

type Exclude<T, U> = T extends U ? never : T;

type A = Exclude<number | string | boolean, string>; 
// 결과: number | boolean

계산 흐름:

  1. 타입 분리:
Exclude<number, string>   // number
Exclude<string, string>   // never
Exclude<boolean, string>  // boolean
  1. 결과 결합:
number | never | booleannumber | boolean

never는 공집합이므로 Union에서 자동 제거됨


🧠 마지막 요약

  • 조건부 타입에 유니온을 전달하면 자동으로 분산 평가됨.
  • 이를 활용하면 타입 연산에서 필터링, 매핑 같은 고급 기능을 구현할 수 있음.
  • Exclude<T, U>는 T에서 U에 해당하는 타입만 제거함.

0개의 댓글