You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么intersection type(交叉类型)并非多个类型的属性交集?

交叉类型命名逻辑解答

首先明确结论:交叉类型(intersection type)和集合论中的交集概念完全对应,你产生的认知偏差是因为混淆了交集的运算对象。

类型的本质是「符合该类型约束的所有值构成的集合」,我们可以从集合的角度重新理解你的示例:

type o1 = {a: string, b: string}
type o2 = {a: string, c: string}
type o3 = o1 & o2
  • o1对应的集合,是所有至少拥有a:string、b:string两个属性的对象的集合
  • o2对应的集合,是所有至少拥有a:string、c:string两个属性的对象的集合

两个集合取交集,得到的是同时属于两个集合的值的集合。也就是说,o3类型的值必须同时满足o1和o2的约束,自然需要同时拥有a、b、c三个属性,这完全符合交集的定义。

你之前的直觉是对「类型的属性集合」取交集,那是另一种运算:如果要得到仅包含两个类型共有属性的类型,正确的写法是:

type CommonKey = keyof o1 & keyof o2
type OnlyCommon = Pick<o1, CommonKey>

此时的OnlyCommon才是仅拥有a属性的类型,和交叉类型的运算逻辑完全不同。

我们还可以用另一个简单例子验证交叉类型的交集本质:number & string的结果是never,因为不存在任何值同时属于数字集合和字符串集合,完全符合交集运算"取两个集合公共部分"的逻辑。


内容的提问来源于stack exchange,提问作者Chor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:03