Exclude(easy)

26 阅读1分钟

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 ?实际上会进行三次处理

  1. 'a' extends 'a'
  2. 'b' extends 'a'
  3. 'c' extends 'a'

显然 2 和 3 不满足条件,b 和 c 会被返回。