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(){}}// 正确,满足了Birdlet animal1: Bird | Dog = new Animal1();// 正确,满足了Doglet 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
的键的索引名
- 作者:joye
- 出处:https://github.com/joye61