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

为什么TypeScript中&运算符对联合类型取交、对对象类型合并属性?

TypeScript 交叉类型 & 行为差异原理解析

交叉类型运算符&的核心逻辑是要求值必须同时符合运算符两侧的所有类型约束,它的表现不是固定的“取交集”或者“取并集”,不同场景下的行为差异,本质是“同时满足两边约束”这个规则的自然推导结果。

联合类型使用 & 的场景

示例代码:

type fruits = 'apple' | 'pear' | 'tomato'
type vegetables = 'spinach' | 'cabbage' | 'tomato';
type gardenPlants = fruits & vegetables;

联合类型的含义是“值属于列出的任意一个成员即可”,如果要求一个值同时属于两个联合类型,那它只能是两个联合共有的成员。所以上述代码中gardenPlants的最终类型是'tomato',只有这个值同时满足“属于fruits联合”和“属于vegetables联合”两个约束,也就是两个联合的交集。

对象类型使用 & 的场景

示例代码:

type Employee = { name: string; age: number }
type Company = { name: string, address: string, year: number}
type Info = keyof (Employee & Company);

对象类型的含义是“值必须拥有声明里列出的所有属性”,如果要求一个对象同时符合两个对象类型的约束,就必须同时拥有两个类型要求的所有属性。所以Employee & Company的交叉类型,是同时包含name、age、address、year四个属性的新对象类型,相当于合并了两边的所有属性。
而keyof运算符作用于对象类型时,会返回该对象所有属性名的联合类型,因此最终Info的类型是'name' | 'age' | 'address' | 'year',也就是两个对象所有属性名的联合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03