TS中|和有什么区别
在 TypeScript 中,|
和 &
是用于组合类型的操作符,但它们的作用和行为完全不同:
1. |
(联合类型, Union Types)
-
作用:
-
表示一个值可以是多种类型中的一种。
-
使用
|
将多个类型组合成一个联合类型。
-
-
使用场景:
-
当一个变量或参数可能是多种类型时。
-
常用于处理不确定类型的场景。
-
-
示例:
let value: string | number; value = "Hello"; // 合法 value = 42; // 合法 value = true; // 错误,boolean 不在联合类型中
-
注意事项:
-
在使用联合类型的值时,只能访问所有类型共有的属性或方法。
-
如果需要访问特定类型的属性或方法,需要进行类型检查或类型断言。
function printValue(value: string | number) { if (typeof value === "string") { console.log(value.toUpperCase()); // 安全,value 是 string } else { console.log(value.toFixed(2)); // 安全,value 是 number } }
-
2. &
(交叉类型, Intersection Types)
-
作用:
-
表示一个值必须同时满足多个类型的条件。
-
使用
&
将多个类型组合成一个交叉类型。
-
-
使用场景:
-
当需要合并多个类型的属性或方法时。
-
常用于扩展对象类型或接口。
-
-
示例:
interface Person { name: string; age: number; } interface Employee { id: number; role: string; } type EmployeePerson = Person & Employee; const employee: EmployeePerson = { name: "Alice", age: 30, id: 123, role: "Developer", };
-
注意事项:
-
交叉类型会将所有类型的属性合并,如果属性名相同但类型不同,可能会导致冲突。
-
交叉类型通常用于对象类型的组合。
-
3. |
和 &
的区别
特性 | | (联合类型) | & (交叉类型) |
含义 | 值可以是多种类型中的一种 | 值必须同时满足多个类型的条件 |
使用场景 | 不确定类型的场景 | 合并多个类型的属性或方法 |
类型检查 | 只能访问共有属性或方法 | 可以访问所有类型的属性或方法 |
示例 | string | number | Person & Employee |
4. 总结
-
|
(联合类型):-
表示“或”的关系,值可以是多种类型中的一种。
-
适合处理不确定类型的场景。
-
-
&
(交叉类型):-
表示“与”的关系,值必须同时满足多个类型的条件。
-
适合合并多个类型的属性或方法。
-
根据具体需求选择合适的操作符,可以更灵活地定义和使用类型。