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写法有什么区别吗?为什么类型不一样?
10 回答11.1k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
你把泛型当做是一个函数,TS在使用泛型时会把联合类型拆成单个传入合并结果,也就是说其实C相当于把'1' | '2' | '3' | '7'拆成单个值最后再合并,因为B是'2' | '3' | '4',所以A中的2和3符合
A extends B
得到nerver
,所以最终结果相当于排除了A和B的交集