extends关键字: 如果extends前面的参数是一个联合类型,会使用分配率计算最终的结果。分配律是指,将联合类型的联合项拆成单项,分别代入条件类型,然后将每个单项代入得到的结果再联合起来,得到最终的判断结果。(K extends T,约束K类型是T里面的子属性)
type Exclude<T, U> = T extends U ? never : T;
type A = 'RED' | 'YELLOW' | 'BLUE';
type B = 'BULE';
type C = Exclude<A, B>; ('RED' | 'YELLOW' | 'BLUE' extends 'BULE' ? never : )
解析条件类型的过程应该是
('RED' extends 'BULE' ?never:'RED')|('YELLOW' extends 'BULE' ?never:'YELLOW')|('BLUE' extends 'BULE' ?never:'BLUE')
就等于 'RED' | 'YELLOW' | never => 'RED' | 'YELLOW'