TypeScript学习-Enums

Enums使得我们能够定义有名字的数字常量集

enum Direction {
    Up = 1,
    Down,  // 2
    Left,  // 3 以此类推
    Right
}

枚举体包含0个或多个枚举成员。枚举成员都对应一个数字值,这个数字值可以是constant或者computed

一个枚举值是constant,满足一下条件

  • 它没有进行初始化,而且它的前一个枚举值是常量,那么它对应的数字常量值为前一个枚举值对应的数字常量值+1
  • 被一个常量枚举表达式初始化-是TypeScript表达式的子集,在编译时计算。满足以下条件就为constant enum expression
  • 数字字面量
  • 引用此枚举体或者其他枚举体里面的constant enum member
  • 带括号的constant enum member
  • 使用了+-~constant enum member
  • 使用了+, -, *, /, %, <<, >>, >>>, &, |, ^等二元操作符,并使用constant enum member作操作数
    如果constant enum member计算为NaN或者Infinity则报编译时错误。

其他情况下的枚举成员都认为是被计算的

enum FileAccess {
    // constant members
    None,
    Read    = 1 << 1,
    Write   = 1 << 2,
    ReadWrite  = Read | Write,
    // computed member
    G = "123".length
}

一个枚举在运行时实际上是一个对象。


const enum

大多数情况上使用regular enum,但是如果对于性能有要求,则选择const enumconst enum都是内联的成员。

const enum Directions {
    Up,
    Down,
    Left,
    Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]

Ambient enums

用于描述已经存在的enum types的形状

declare enum Enum {
    A = 1,
    B,
    C = 2
}

最重要的不同就是,在non-ambient,中,regular enum中没有初始化的成员为constant member,而在non-const ambient没有初始化的成员为computed member

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容