typescript 写法问题

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写法有什么区别吗?为什么类型不一样?

阅读 1.3k
1 个回答

你把泛型当做是一个函数,TS在使用泛型时会把联合类型拆成单个传入合并结果,也就是说其实C相当于把'1' | '2' | '3' | '7'拆成单个值最后再合并,因为B是'2' | '3' | '4',所以A中的2和3符合A extends B得到nerver,所以最终结果相当于排除了A和B的交集

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题