A & B 交叉类型
最后更新:2026-10-22
A & B 交叉类型
交叉类型 A & B 把多个类型的属性合并成一个:值必须同时满足 A 和 B。适合把若干小接口"混入式"地组合起来。
| 分组 | 类型组合 |
|---|---|
| 类型 | 类型 |
| 严格模式 | 不需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
type A = { id: number };
type B = { name: string };
type AB = A & B; // 同时拥有 id 和 name
⚙️ 参数
| A & B | & 连接任意多个类型;成员越多约束越强(范围越窄) |
|---|
返回值:无返回值——交叉类型是纯类型层概念,编译后消失。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
7 login 2026-01-01T09:00:00Z
(转译后运行输出;audit 少写 timestamp 字段会得到编译错误——交叉要求全部成员齐备)
💡 要点
ℹ️ 说明 交叉是"且"、联合是"或":A & B 要求同时满足(更窄),A | B 只需满足其一(更宽)。
⚠️ 注意 原始类型交叉会得到 never(string & number 无交集);同名属性类型不同时该属性类型变成两侧的交集,通常也是 never。
💡 提示 与工具类型组合是交叉的强项:User & Partial<User> 这类"原样+局部覆盖"写法简洁直接。
🏷️ 相关类型组合
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 交叉类型和 interface extends 有什么区别?
A 效果相似,机制不同:extends 只能继承 interface/类型形状、冲突会报错;& 可叠加任意类型表达式(含工具类型结果),冲突静默变 never。需要清晰报错用 extends。
Q string & number 是什么?
A never:没有值能同时是字符串和数字。原始类型的交叉几乎总是 never,这也可以用来在类型运算里"表达不可能"。
Q 两个接口的同名属性类型不同会怎样?
A 该属性的类型变成两侧类型的交叉。string & number 直接是 never,之后任何赋值都报错;要用交叉合并接口,先确认字段类型一致。