TypeScript数组类型
TypeScrip数组类型即:声明变量为数组。
定义数组的方法:
数组方法:
Tuple Types(元祖类型)
元祖类型是另一种特殊的数组类型,一般来说他可以存储不同类型的成语,想定了数组的长度及每个成员的类型。(普通数组也可以通过指定联合类型的类型参数,从而存放不同类型的成员)。元祖的成员是可以被修改,可以调用一系列的数组方法。
ReadonlyArray 只读数组
只读数组是TS提供的一种特殊的数组,它的任何成员都不能被修改。
特点
- 无法进行增删改等操作,push、pop等修改自身的方法都无法使用。
- 可以使用不修改自身的数组方法。例如使用slice方法,放回一个普通的数组。
- 代表一种类型,无法当做构造函数使用,不能使用new操作符。
- 在声明一个只读数组类型的变量时需指定类型参数,只读数组里只能存放该类型的值。
- 只读数组类型的变量本身可以接受普通数组的赋值。
- 普通数组不能接收只读数组的赋值。
联合/交叉类型
联合类型:联合类型表示取值可以为多种类型中的一种,使用 | 分割每个类型。约束取值:
交叉类型:交叉类型是将多个类型合并为一个类型,使用&定义交叉类型。可以将多个接口类型合并成一个类型,实现等同于接口与继承,如:
类型保护和类型守卫
类型保护是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。类型保护具有唯一的属性,可以确保测试的值是根据返回的布尔值设置的类型。
有五种主要的方式来使用类型保护:
- instanceof关键字
- typeof关键字
- in关键字
- 等式收缩是保护器
- 带有谓词的自定义类型保护
类型守卫:定义一个函数,他返回值是一个类型谓词,生效范围为子作用域。
高级类型
索引类型:
- 关键字【keyof】:其相当于取值对象中的所有key组成的字符串字面量,如:
- 关键字【in】:其相当于取值字符串字面量中的一种可能,配合反省p,即表示每个key。
- 关键字【?】:通过设定对象可选选项,即可自动推出子集类型。
函数返回值类型:
- 关键字【extends】跟随泛型出现时,表示类型推断,其表达式可类比三元表达式,如T === 判断?类型A:类型B
- 关键字【infer】:出现在类型推荐中,表示定义类型变量,可以用于指代类型。