43 - 实现 Exclude
实现内置的 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)