【2020-01-17】高级类型

一、交叉类型

交叉类型是将多个类型合并为一个类型。这让我们把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。

 二、联合类型

表示一个值可以是几种类型之一,我们用竖线 | 分隔每个类型,所以string | number,表示一个值既可以是string 也可以是 number

 三、类型保护和区分类型

 四、可以为null的类型

null和undefined 

 如果编译器不能够去除null或undefined ,你可以使用类型断言手动去除。语法是添加!后缀

 五、类型别名

类型别名会给类型起一个新名字。类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其他任何你需要手写的类型

起别名不会新建一个类型 - 它创建了一个新名字来引用那个类型。给原始类型起别名通常没什么用,尽管可以作为文档的一种形式使用

同接口一样,类型别名也可以是泛型-我们可以添加类型参数并且在别名声明的右侧传入:

 然而。类型别名不能出现在声明右侧的任何地方

六、接口 VS 类型别名

类型别名和接口有一些细微差距

1、接口可以被实现,和可以继承其他接口,但是类型别名不可以

2、无法通过接口来描述一个类型并且需要使用联合类型或元组类型,这时通常会使用类型别名

七、字符串字面量类型

字符串字面量类型允许你指定字符串必须的固定值。在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合

 八、可辨识联合

 九、完整性检查

 十、多态的this类型

 由于这个类使用了this类型,你可以继承它,新的类可以直接使用之前的方法,不需要做任何的改变

十一、索引类型(Index types)

使用索引类型,编译器就能够检查使用了动态属性名的代码。

 十二、索引类型和字符串索引签名

原文地址:https://www.cnblogs.com/QQ-lala/p/12207251.html