typescript中泛型和普通类型使用extends进行操作的返回类型为什么不相同?
代码如下:
type a = 1 | 2 | 3;
type b = 1 | 2;
type Exclude<T, U> = T extends U ? never : T;
type d = Exclude<a, b>;
type c = a extends b ? never : a;
let x1: c = 1; // type c = 1 | 2 | 3
let x2: d = 3; // type d = 3
同样是T extends U ? never : T,为什么c和d的类型不一样?
我参阅的文章中有这样一句话:
注意,生成的结果是分配式的。
举个例子,如果我们把X换成T,如此形式:T extends U? T: never。
此时返回的T,是满足原来的T中包含U的部分,可以理解为T和U的交集。
请问这该如何理解?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要想conditional types生效则必须得保证extends左边的类型必须出现在类型参数列表中也就是
<...>
中所以可以把c改写成
详情看这篇文章的 Refining unions with distributive conditional types 部分
https://artsy.github.io/blog/...