02. Exclude

문제

Implement the built-in Exclude<T, U>. Exclude from T those types that are assignable to U. For example:

type T0 = Exclude<"a" | "b" | "c", "a">; // expected "b" | "c"
type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // expected "c"

풀이

문제의 핵심은 uniondistributive 다. 바로 풀어보자.

type MyExclude<T, U> = ...;

// 1. U 에 조건을 걸어준다.
// union타입에 조건을 걸어주면 distributive 특성이 발생해서 반복이 된다
type MyExclude<T, U> = T extends U ? xxx : yyy;

// 2. 참이면 즉 T 가 U에 있으면 never 를 리턴해준다.
type MyExclude<T, U> = T extends U ? never : T;

Last updated