5分钟Typscript – 枚举(Enums)

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"
复制代码

常量枚举类型

  1. 可以禁止反响映射,简化编译后的代码
  2. 枚举对象编译后不存在,只有它的值会被赋予对应的地方
// 注意前面的 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
喜欢就支持一下吧
点赞0 分享