美文网首页我爱编程
TypeScript学习-Enums

TypeScript学习-Enums

作者: 指尖泛出的繁华 | 来源:发表于2017-07-01 10:18 被阅读26次

    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

    相关文章

      网友评论

        本文标题:TypeScript学习-Enums

        本文链接:https://www.haomeiwen.com/subject/vpywcxtx.html