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,之后任何赋值都报错;要用交叉合并接口,先确认字段类型一致。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏