问题 #
实现内置的 Exclude <T,U> 类型,但不能直接使用它本身。
从联合类型T中排除U的类型成员,来构造一个新的类型。
解答 #
type MyExclude<T, U> = T extends U ? never : T拆分 #
- 注意是联合类型,从联合类型
T中排除U的类型成员,来构造一个新的类型 T extends U如果T是U的子集则返回never,否则返回T- 联合类型会自动分发类型
type T = Exclude<1 | 2, 1 | 3> // -> 2- 4自动分发后的类型等于 (1 extends 1 | 3 ? never : 1) | (2 extends 1 | 3 ? never : 2)