T에서 U에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude<T, U>
type Result = MyExclude<'a' | 'b' | 'c', 'a'> // 'b' | 'c'
union 타입에서 특정 한 것 들을 제외하고자 하는 것이 목적이다.
이 문제를 해결하기 위해선 typescript의 Distributive Conditional Types 문법을 알아야한다.
새로 만들 MyExclude 제네릭은 두개의 타입 변수를 받아야한다.
type MyExclude<T, U>
여기서 두 번 째 U가 아닌 것 들만을 추출한다.
type MyExclude<T, U> = T extends U ? never : T;
T extends U를 통해 존재 여부를 확인하고 U에 존재하지 않을 때만 값을 반환 시킵니다.