Exclude 排除联合类型中的一部分。
声明泛型,泛型参数 T 和 U都是联合类型。
type Exclude<T, U> = any
判断如果类型不在 U 中,则返回类型,否侧返回 never
type Exclude<T, U> = T extends U ? never : T;
Distributive Conditional Types 当 extends 操作泛型参数时,如果泛型参数是一个联合类型,则会对联合类型的每一项分别进行操作。
type MyExclude<T, U> = T extends U ? never : T;
type Result = MyExclude<'a' | 'b' | 'c', 'a'> // 'b' | 'c'
例如上面的代码,我们提供的泛型参数 T 为 'a' | 'b' | 'c'
,T extends U ?
实际上会进行三次处理
'a' extends 'a'
'b' extends 'a'
'c' extends 'a'
显然 2 和 3 不满足条件,b 和 c 会被返回。