typescript中 & 和 | 的用法和区别

在 TypeScript 中,&| 分别用于创建交叉类型(Intersection Types)和联合类型(Union Types),它们是 TypeScript 类型系统中的核心概念。

交叉类型(&

交叉类型是将多个类型合并为一个类型,这意味着新类型将具有所有成员类型的特性。这在你想要组合多个类型的属性到一个类型中时非常有用。

typescript 复制代码
type A = { a: string };
type B = { b: number };
type C = A & B;

let example: C = { a: "hello", b: 42 }; // 正确

在上面的例子中,类型 C 是类型 AB 的交叉,因此 C 类型的对象 example 必须包含 a 属性(来自 A)和 b 属性(来自 B)。

联合类型(|

联合类型表示一个值可以是几种类型之一。它用于表示一个值可以属于多个类型中的任何一个。

typescript 复制代码
type D = string | number;

let value: D;
value = "test"; // 正确
value = 123;    // 正确
value = true;   // 错误,`boolean` 不是 `string | number`

在上面的例子中,类型 Dstringnumber 的联合,意味着变量 value 可以赋值为字符串或数字。

区别

  • 交叉类型 (&) 合并多个类型的属性,创建出一个包含所有属性的单一类型。如果不同类型中存在同名属性但类型不兼容,交叉类型将无法正确形成(结果为 never 类型),因为没有任何类型可以同时是这些不兼容的类型。
  • 联合类型 (|) 表示一个值可以是多种类型中的任何一种。在使用联合类型的值时,你只能访问所有成员类型共有的属性或方法。

在实际应用中,你可能会需要在对象类型、函数参数、返回值等多种地方使用这两种类型。选择使用哪一种取决于你的具体需求:是否需要组合类型(&)还是需要一个值可以是多种类型之一(|)。

相关推荐
子兮曰11 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰11 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万11 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝11 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋12 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁13 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄13 小时前
JavaScript 隐式全局变量解析
javascript
汉堡大王952714 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大14 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师15 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端