# 联合类型
可以把 |
类比为 JavaScript 中的逻辑或 ||
,只不过前者表示可能的类型。
满足其一即可
// 既可以是数字也可以是字符串
let age: number | string = 20;
age = "20";
// 1 | "2" 在这里是类型,代表常量。所以num的值只能为 1 或者 "2"
let num: 1 | "2" = 1;
num = "2";
// | 表示要么有a属性,要么有b属性,要么a、b都有
let obj: { a: 1 } | { b: "2" };
obj = { a: 1 };
obj = { b: "2" };
obj = { a: 1, b: "2" };
# 交叉类型
把多个类型合并成一个类型,合并后的类型将拥有所有成员类型的特性。使用 &
操作符来声明交叉类型(并集)。
必须全部满足
// 思考这里有一个值满足m的类型要求吗?
let m: string & number; // 不会有任何值满足这个类型 一般不会这么写
let obj1: { name: string; age: number } & { height: number } = {
name: "张三",
age: 20,
height: 180,
};
// 如果一个属性出现多次类型设置,需要都满足
let obj2: { age: number } & { age: 18 } = {
age: 18,
};
# 联合交叉类型
联合、交叉类型本身就可以直接组合使用,这就涉及 |、& 操作符的优先级问题。
联合操作符 | 的优先级低于交叉操作符 &,同样,我们可以通过使用小括弧 () 来调整操作符的优先级,这个和 js 一样。
let m: ({ id: number } & { name: string }) | ({ id: string } & { name: number });
m = {
id: 1,
name: "",
};
m = {
id: "",
name: 1,
};
← 数据类型 any与unknown →