# 联合类型
本节聚焦对类型的求取并集的运算,联合类型。
# 基础使用
在字面量类型 介绍了利用 | 组合多个单一类型的字面量。| 也可组合不同类型的字面量值。
type YesOrNo = true | false | 'Y' | 'N' | 0 | 1 | 'Yes' | 'No';
let isOk: YesOrNo = true;
isOk = 'N';
// 报错, 值不属于上述字面量集合
isOk = 'foo';
TIP
类型别名尽量语义化,好的名称结合类型标注可以增强代码的可读性。
实际上 | 可以组合任意类型,例如原始类型 number,string 等
// 定义一个类型可以接受 string 或 number 类型
type StringOrNumber = string | number;
// 合法
let fooBar: StringOrNumber = 1;
// 合法
fooBar = 'demo';
// 报错类型不是 string 或 number
fooBar = false;
# 对象类型结合类型断言
利用 | 组合对象类型, 结合类型断言辅助 TypeScript 进行类型检查。
type Bird = {
fly(): void;
layEggs(): void;
};
type Fish = {
swim(): void;
layEggs(): void;
};
type BirdOrFish = Bird | Fish;
function createPet(name: string) {
switch (name) {
case 'bird':
return {
fly() {},
layEggs() {}
};
case 'fish':
return {
swim() {},
layEggs() {}
};
default:
return null;
}
}
// 申明 pet 变量可接受 Fish 或 Bird 类型
let pet: BirdOrFish;
// 合法 断言返回结果为 Bird
pet = <Bird>createPet('bird');
pet.layEggs();
pet.fly();
// 报错, 断言为 Bird 实例不具有 swim 方法
pet.swim();
// 合法 赋值为 fish 类型, 采用 as 断言返回结果为 Fish 类型
pet = createPet('fish') as Fish;
pet.layEggs();
pet.swim();
// 报错, 断言为 Fish 实例不具有 fly 方法
pet.fly();
示例借助两种类型断言,辅助 TypeScript 类型检查,确定调用对象方法调用是否合法
# 标记联合类型
# 总结
本节知识点如下:
- 采用
|组合多种类型 - 当联合多个对象时,使用类型断言,辅助检查