A | B 联合类型

最后更新:2026-10-22

A | B 联合类型

联合类型 A | B 表示"值是 A 或 B 之一"。使用联合值前必须先收窄(typeof、in 等),编译器才知道当前面对的是哪一种。

分组类型组合
类型类型
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

type Id = string | number;
let id: Id = "u1";
id = 42; // 两种都合法

if (typeof id === "number") {
  id.toFixed(0); // 收窄后才有成员方法可用
}

⚙️ 参数

A | B竖线分隔成员类型,成员数量不限,重复成员会被自动合并

返回值:无返回值——联合类型是纯类型层概念,编译后消失。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

ABC 3.14

(转译后运行输出;不在 if 里收窄直接调 value.toUpperCase() 会得到编译错误)

💡 要点

ℹ️ 说明 未收窄的联合值只能访问所有成员共有的属性/方法——编译器无法确定当前是哪一种。
💡 提示 收窄手段按场景选:typeof(原始值)、in(属性存在)、instanceof(类实例)、字面量相等(判别联合)。
⚠️ 注意 联合分支过多会让每个使用点都写收窄,维护成本高;带公共标签字段的分支考虑改成判别联合。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q 为什么必须收窄才能用方法?
A string | number 上调用 toUpperCase:如果运行时是 number 就会崩。编译器要求你先证明"当前是 string",收窄就是这个证明过程。
Q 联合类型和 any 的区别?
A 联合明确列出"允许的几种可能",用错范围外直接报错;any 允许一切且失去所有检查。联合是"有限的选择",any 是"放弃判断"。
Q 什么是可辨识联合?
A 每个分支带一个字面量字段(如 kind: "circle" | "rect"),switch 该字段即可一次收窄整个对象。详见 discriminated-unions 条目。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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