type SetDifference<A, B> = A extends B ? never : A;
type A = '1' | '2' | '3' | '7';
type B = '2' | '3' | '4';
type C = SetDifference<A, B>; // '1' | '7'
type D = A extends B ? never : A; // '1' | '2' | '3' | '7'
大佬们,C和D写法有什么区别吗?为什么类型不一样?
type SetDifference<A, B> = A extends B ? never : A;
type A = '1' | '2' | '3' | '7';
type B = '2' | '3' | '4';
type C = SetDifference<A, B>; // '1' | '7'
type D = A extends B ? never : A; // '1' | '2' | '3' | '7'
大佬们,C和D写法有什么区别吗?为什么类型不一样?
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
5 回答1.6k 阅读✓ 已解决
3 回答2.2k 阅读
你把泛型当做是一个函数,TS在使用泛型时会把联合类型拆成单个传入合并结果,也就是说其实C相当于把'1' | '2' | '3' | '7'拆成单个值最后再合并,因为B是'2' | '3' | '4',所以A中的2和3符合
A extends B
得到nerver
,所以最终结果相当于排除了A和B的交集