它的要求是:实现一个工具类型,接收两个联合类型 T 和 U,从 T 中排除掉那些可以赋值给 U 的类型,返回剩下的部分。
type MyExclude<T, U> = T extends U ? never : T;重点在于 ts 分布式条件类型这个特性,在进行 extends 运算的时候,不是把 T 作为一个整体来进行看是否是超集,而是说一个一个来比较
例如
- 第一项
'a':'a' extends 'a' ? never : 'a'因为成立,所以返回never。 - 第二项
'b':'b' extends 'a' ? never : 'b'因为不成立,所以返回b。 - 第三项
'c':'c' extends 'a' ? never : 'c'因为不成立,所以返回c。