文章转载自:https://github.com/zhongsp/TypeScript/blob/master/doc/handbook/Enums.md

枚举

使用枚举我们可以定义一些有名字的数字常量。枚举通过使用 enum 关键字定义。

enum Direction {
    Up = 1,
    Down,
    Left,
    Right
}

枚举成员被当成常数的条件:

  • 不具有初始化函数并且前面的枚举成员是常数(第一个元素默认为 0
  • 枚举成员使用常数枚举表达式初始化
enum FileAccess {
    None,
    Read    = 1 << 1,
    Write   = 1 << 2,
    ReadWrite  = Read | Write,
    G = "123".length  // computed member
}

枚举是在运行时真正存在的对象,支持从枚举值到枚举名的反射映射:

enum Enum { A }
let a = Enum.A;
let nameOfA = Enum[Enum.A]; // "A"

编译后:

var Enum;
(function (Enum) {
    Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));

常数枚举

使用 const 修饰符可以定义常数枚举,在编译阶段会被删除,成员在使用处被内联:

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

编译后:

var directions = [0 /* Up */, 1 /* Down */, 2 /* Left */, 3 /* Right */];

外部枚举

外部枚举用来描述已经存在的枚举类型的形状:

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

外部枚举和非外部枚举的重要区别:在正常的枚举里,没有初始化方法的成员被当成常数成员;对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。


<
Previous Post
转载:《TypeScript 中文入门教程》 17、注解(Decorators)
>
Next Post
转载:《TypeScript 中文入门教程》 8、函数