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 类型),因为没有任何类型可以同时是这些不兼容的类型。
  • 联合类型 (|) 表示一个值可以是多种类型中的任何一种。在使用联合类型的值时,你只能访问所有成员类型共有的属性或方法。

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

相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter9 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
你的人类朋友9 小时前
【Node.js】什么是Node.js
javascript·后端·node.js
Jerry9 小时前
Jetpack Compose 中的状态
前端
dae bal10 小时前
关于RSA和AES加密
前端·vue.js