3.9元祖
场景:在地图中,使用经纬度坐标来标记位置信息
可以使用数组来记录坐标,该数组只有两个元素,并且这两个元素都是数值类型
let cor: number[] = [120, 30]
使用number[]的缺点:不严谨,因为该类型的数组中可以出现任意多个数字
更好的方式:元祖 Tuple
元祖类型是另一种类型的数组,它确切知道包含多少个元素,以及特定索引对应的类型
let cor: number[] = [120, 30]
let posoition: [number, number] = [120, 30]
3.10类型推论
在TS中,某些没有明确指出类型的地方,TS的类型推论机制会帮助提供类型。
换句话说:由于类型推论的存在,这些地方,类型注释可以省略不写
发生推论的两种常见场景:1.声明变量并初始化时 2.决定函数返回值时
这两种情况类型注释可以不写
推荐:能省略的地方就省略,提高开发效率
3.11类型断言
类型断言用于手动指定一个值的类型。有时候你会比TS更加明确一个值的类型。此时,可以使用类型断言来指定更具体的类型。
两种断言写法
const aLink = document.getElementById('link') as HTMLAnchorElement
const aLink = <HTMLAnchorElement>document.getElementById('link')
1.使用as关键字断言
2.as后面是一个更加具体的类型
3.通过类型断言,aLink的类型变的更加具体,这样就可以访问a标签特有的属性或方法了。
4.console.dir()打印DOM元素,在属性列表的最后面,即可看到元素的类型
3.12字面量类型
let str1 = 'Hello Ts' //string类型
const str2 = 'Hello TS' //Hello Ts 类型
解释
str2是一个常量,它的值不能变化,所以类型是'Hello TS'
此处的'Hello TS' 就是一个字面量类型,也就是说某个特定的字符串也可以作为TS中的类型,除了字符串外,任意的JS字面量(对象、数字)都可以作为类型使用
3.13枚举类型
枚举类型相当于字面量类型+联合类型组合的功能,也可以表示一组明确的可选值。
枚举:定义一组枚举常量。它描述一个值,该值可以是这些命名常量中的一个
enum Direction {
Top,
Left,
Bottom,
Right,
}
function changeDirection(direction: Direction) {
console.log(direction)
}
changeDirection(Direction.Top)
解释:
1.使用enum关键字定义枚举
2.约定枚举名称、值以大写字母开头
3.枚举中多个值以逗号作为分隔
4.定义好枚举后直接使用枚举名称作为类型注释
注意:形参direction的类型为枚举Direction,那么实参的值就是枚举Direction成员中的任意一个。
枚举成员的值以及数字枚举
问题:我们把枚举成员作为了函数的实参,它的值是什么?
changeDirection(Direction.Top) //Direction.Top=0
注意:
1.枚举成员是有值的,默认为0开始自增的数值
2.我们把枚举成员的值为数字的枚举,称为数字枚举
3.可以给枚举成员初始化值
enum Direction { Top = 2, Left = 10, Bottom = 8, Right = 6, }
字符串枚举:枚举成员的值是字符串
注意:字符串枚举没有自增长行为,因此,字符串枚举的每个成员都必须有初始值。
枚举的特点以及原理:
枚举是TS为数不多的非JS类型之一
因此:枚举不仅是类型,还提供值。
也就是说,其他类型在编译为JS代码时自动移除,但是枚举类型会被编译为JS代码。
3.14any类型 (尽量少用)
不会有任何类型错误提示
let name: any = 10
3.15 TS中的typeof
TS也提供了typeof操作符,可以在类型上下文中引用变量或属性的类型(类型查询)
使用场景:根据已有变量的值,获取该值的类型,来简化类型书写。