Typscript – 枚举(Enums)
基本用法 & 类型
enum Animals {
/* 以下为常量类型值, 其中数字和字符串统称为字面量类型 */
Dog, // => 0,默认第一个为0,也可以写成 Dog = 2,用于自定义初始值
Cat, // => 1,Cat 为 Dog + 1
Fish, // => 2,Fish 为 Cat + 1, 如此类推
Pig = "Pig", // => "Pig",也可以设置为字符串,但是必须在数字类型之后,一般数字和字符串不混用
/* 其他情况均为计算类型值,不能和字符串值混用 */
Bird = 4 + 4, // => 8,还可以用 +, -, *, /, %, <<, >>, >>>, &, |, ^ 这些操作符计算
Fox = Dog + 10, // => 10,可以引用其他枚举(包括在自己前面定义的)
Cow = 'Coooooooooooow'.length
}
复制代码
字面量类型推断
如果枚举的值都是字面量类型,则TS可以利用这个枚举推断并缩减类型范围
enum CatOrDog {
Cat, // => 0
Dog, // => 1
}
function fn (a: CatOrDog) {
if (a === CatOrDog.Dog) {
...
} else {
// 此时TS能推断出a肯定为Cat
}
}
复制代码
运行时 & 编译时的特性
console.log(CatOrDog.Cat) // => 0,enum是运行时真实存在的对象
typeof CatOrDog // TS里获取枚举的类型
keyof typeof CatOrDog // TS里获取枚举所有键的集合
复制代码
枚举的反向映射
const a = CatOrDog.Cat // => 0
const b = CatOrDog[0] // => "Cat"
复制代码
常量枚举类型
- 可以禁止反响映射,简化编译后的代码
- 枚举对象编译后不存在,只有它的值会被赋予对应的地方
// 注意前面的 const
const enum CatOrDog2 {
Cat,
Dog,
}
复制代码
Ambient enums(暂时不知道有什么用)
类似 Object 的语法
JS以后可能会引入enum
关键字,所以特意右加了as const
的写法,这样以后冲突的时候还是可以用
// 注意最后的 as const
const CatOrDog3 = {
Cat: 0,
Dog: 1,
} as const
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END