登录/注册
小开开
2649
占位
2
占位
0
浏览量
占位
粉丝
占位
关注
TypeScript-复合类型
小开开
2020-12-06 17:15:58 2020-12-06
134
0

交叉类型

语法:

T1 & T2 & ...

交叉类型是将多个类型合并为一个总的类型,它包含了多个类型的所有特性,类似于编程逻辑中的 操作

interface Bird {
fly(): void;
}
interface Dog {
run(): void;
}
// 同时具有Bird的fly和Dog的run特征
class Animal {
fly(){}
run(){}
}
// 正确
let animal: Bird & Dog = new Animal();

联合类型

语法:

T1 | T2 | ...

联合类型是取多个类型中的其中之一,只要满足了其中一个类型,就认为类型兼容。联合类型类似于编程逻辑中的 操作

interface Bird {
fly(): void;
}
interface Dog {
run(): void;
}
// 与 Bird 兼容
class Animal1 {
fly(){}
}
// 与 Dog 兼容
class Animal2 {
run(){}
}
// 正确,满足了Bird
let animal1: Bird | Dog = new Animal1();
// 正确,满足了Dog
let animal2: Bird | Dog = new Animal2();

高级联合

联合类型非常神奇,构成联合类型的组合可以是以下三种方式的任意组合

  • 值与类型
  • 值与值
  • 类型与类型
// 值与类型混搭
let u: 99 | string | boolean;
u = 'a';
u = 99;
u = true;
// 值与值混搭
let u: 'a' | 'b' | 99;
u = 'a';
u = 'b';
u = 99;
// 类型与类型混搭
let u: number | string | boolean;
u = 99;
u = 'hello world';
u = false;

keyof 关键字

语法

// T代表类型
keyof T

keyof 关键字作用于类型,通过获取一个类型的所有属性名,生成一个新的字符串值的联合类型:

interface Person {
name: string;
age: number;
}
// 通过keyof关键字声明联合
let keyWord: keyof Person;
// 完全等价于
let keyWord: "name" | "age";
keyWord = "name";
keyWord = "age";

也就是说,keyof 关键字生成的是字符串值的联合,每个字符串值都是被获取类型 T键的索引名

暂无评论