这是我参与「第五届青训营 」笔记创作活动的第7天
接着上次的说。
2.1.8类型推断
在ts中某些没有明确指出类型的地方,ts的类型推论机制会帮助提供类型。换句话说,由于类型推论的存在,这些地方类型,注解可以省略不写。虽然省略不写,但类型保护机制和类型检查机制仍然存在。
发生类型推断的两种常见情景有
①声明变量并初始化值的时候
②确定函数返回值时
2.1.9类型断言
有时候你会比更加明确一个值的类型,此时可以使用类型断言来指定更具体的类型
<a herf="www.baidu.com" id="link">baidu</a>
const a = document.getElementById("link')
getElementByID方法返回值的类型是HTMLElement,该类型只包含所有标签公共的属性或方法,不包含a标签特有的herf属性,因此这个类型太宽泛,不具体,无法操作herf等a标签特有的属性或方法。这时候就需要用到类型断言。
const a = document.getElementById("link') as HTMLAnchorElement
使用as关键字实现类型断言。关键字as后面的类型是一个更加具体的类型。通过类型断言,a的类型变得更加具体,这样就可以访问a标签特有的属性或方法了
2.1.10字面量类型
先看一段代码
let arg1 = 'meng'//由于类型推断机制,arg1的类型是string
const arg2 = 'meng'//arg2的类型就是'meng'
arg1是一个变量,它的值可以是任意字符串,所以类型是string。arg2是一个常量,常量的值不能变化,只能是'meng'。所以它的类型为'meng'。注意,此处的'meng'就是一个字面量类型,也就是说,某个特定的字符串也可以作为TS中的类型。除字符串外,任意的JS字面量,比如对象、数字等都可以作为类型使用。
那么字面量类型到底有什么作用呢?
- 使用模式:字面量类型配合联合类型一起使用
- 使用场景:用来表示一组明确的可选值列表。比如在贪吃蛇游戏中,游戏的方向的可选值只能是上下左右中的任意一个。
function changeDirection(direction:'up'|'down'|'left'|'right'){
console.log(direction)
}
2.1.11枚举类型
从字面量类型,我们可以引申出枚举类型
enum Direction { up, down, left, right }
function changeDirection(direction:Direction){
console.log(direction)
}
changeDirection(Direction.up)//调用函数
- 使用
enum关键字定义枚举 - 约定枚举名称,枚举中的只以大写字母开头
- 枚举中的多个值之间通过逗号分隔
- 定义好枚举后直接使用枚举名称作为类型注解
除此之外,还有一个神奇的现象--枚举的成员是有值的--默认从0开始自增的数值
同时我们也把枚举成员是数值的这类枚举称为数字枚举。
当然我们也可以给枚举成员设置初始值
enum Direction { up = 10, down, left, right }
enum Direction {
up = 10,
down = 12,
left = 14,
right = 16
}
除了数字枚举之外,还有字符串枚举。由于字符串没有初始值,所以字符串枚举的每个成员都要设置默认值
enum Direction {
up = 'UP',
down = 'DOWN',
left = 'LEFT',
right = 'RIGHT'
}
关于枚举
美举是为数不多的非javascript类型及扩展的特性之一,因为其他类型仅仅被当作类型。而枚举,不仅用作类型,也提供值。也就是说,其他的类型会在编译为JS代码时自动移除,但是枚举类型会被编译为JS代码。