[한입] 분산적인 조건부 타입

TK·2023년 12월 21일
0

[강의] 한입 시리즈

목록 보기
54/59
post-custom-banner

(Distributive Conditional Types)

  • 유니온타입은 일반적인 조건부 타입이 아닌 분산적인 조건부 타입으로 업그레이드 되어 각각 분리되어 들어간다.
type StringNumberSwitch<T> = T extends number ? string : number;

let varA: StringNumberSwitch<number>; // string
let varB: StringNumberSwitch<string>; // number
let varC: StringNumberSwitch<number | string>; // number | string 유니온타입
// 1. let varC: StringNumberSwitch<number>; → string
// 2. let varC: StringNumberSwitch<string>; → number

✏️예제1 : 유니온에서 특정 타입만 제거하기

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

type A = Exclude<number | string | boolean, string>; // number | boolean 유니온 타입
// type A = Exclude<number , string>; → number
// type A = Exclude<string , string>; → never
// type A = Exclude<boolean , string>; → boolean
// 결과: number | never | boolean 합집합 → number | boolean 유니온 타입

✏️예제2 : 유니온에서 특정 타입만 가져오기

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

type B = Extract<number | string | boolean, string>; // string 타입
// type A = Exclude<number , string>; → never
// type A = Exclude<string , string>; → string
// type A = Exclude<boolean , string>; → never
// 결과: never | string | never 합집합 → string 타입
profile
쉬운게 좋은 FE개발자😺
post-custom-banner

0개의 댓글