它的要求是:实现一个工具类型,接收两个联合类型 TU,从 T 中排除掉那些可以赋值给 U 的类型,返回剩下的部分。

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

重点在于 ts 分布式条件类型这个特性,在进行 extends 运算的时候,不是把 T 作为一个整体来进行看是否是超集,而是说一个一个来比较

例如

  1. 第一项 'a''a' extends 'a' ? never : 'a' 因为成立,所以返回 never
  2. 第二项 'b''b' extends 'a' ? never : 'b' 因为不成立,所以返回 b
  3. 第三项 'c''c' extends 'a' ? never : 'c' 因为不成立,所以返回 c