Skip to main content

43 - 实现 Exclude

Answer TestCases

实现内置的 Exclude<T, U> 类型,但不能直接使用它本身。

从联合类型 T 中排除 U 中的类型,来构造一个新的类型。

例如:

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

Solution

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

extends 语句中,如果 T 是联合类型,则对联合类型的各个子类型进行一次循环, 这叫做联合类型的 distributive 行为

T = 'a' | 'b' , 在语句 T extends U ? X : Y 中等同于

('a' extends U ? X : Y) | ('b' extends U ? X : Y)