Type Challenges

Exclude

#TypeScript

43 - Exclude

T에서 U에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude<T, U>를 이를 사용하지 않고 구현하세요.

type Result = MyExclude<"a" | "b" | "c", "a">; // 'b' | 'c'

풀이

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

타입스크립트의 타입시스템은 유니온 타입을 분배시켜 처리한다.
예를 들어 'a' | 'b' | 'c' extends 'a'라면 이는 'a' extends 'a' | 'b' extends 'a' | 'c' extends 'a'로 처리된다.
따라서 MyExclude<'a' | 'b' | 'c', 'a'>'b' | 'c'가 된다.

Reference

Type Challenges, 43 - Exclude