TypeScript基础入门 - 枚举 - 运行时的枚举和外部枚举

转发node

TypeScript基础入门 - 枚举 - 运行时的枚举和外部枚举

项目实践仓库git

https://github.com/durban89/typescript_demo.git
tag: 1.3.8

为了保证后面的学习演示须要安装下ts-node,这样后面的每一个操做都能直接运行看到输出的结果。github

npm install -D ts-node

后面本身在练习的时候能够这样使用typescript

npx ts-node 脚本路径

枚举

使用枚举咱们能够定义一些带名字的常量。 使用枚举能够清晰地表达意图或建立一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。npm

运行时的枚举

枚举是在运行时真正存在的对象。 例以下面的枚举:函数

enum E {
    X, Y, Z
}

实际上能够传递给函数学习

enum E {
    X,Y,Z
}
function f(obj: { X: number }) {
    return obj.X
}

console.log(f(E));

反向映射

除了建立一个以属性名作为对象成员的对象以外,数字枚举成员还具备了 反向映射,从枚举值到枚举名字。 例如,在下面的例子中:spa

enum Enum {
    A,
}

let a = Enum.A;
let nameOfA = Enum[a];
console.log(nameOfA);

TypeScript可能会将这段代码编译为下面的JavaScript:code

var Enum;
(function (Enum) {
    Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));
var a = Enum.A;
var nameOfA = Enum[a];
console.log(nameOfA);

生成的代码中,枚举类型被编译成一个对象,它包含了正向映射( name -> value)和反向映射( value -> name)。 引用枚举成员总会生成为对属性访问而且永远也不会内联代码。对象

要注意的是 不会为字符串枚举成员生成反向映射。

const枚举

大多数状况下,枚举是十分有效的方案。 然而在某些状况下需求很严格。 为了不在额外生成的代码上的开销和额外的非直接的对枚举成员的访问,咱们可使用 const枚举。 常量枚举经过在枚举上使用 const修饰符来定义。

const enum Enum {
    A = 1,
    B = A * 2,
}

常量枚举只能使用常量枚举表达式,而且不一样于常规的枚举,它们在编译阶段会被删除。 常量枚举成员在使用的地方会被内联进来。 之因此能够这么作是由于,常量枚举不容许包含计算成员。

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
}


外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于很是数的外部枚举而言,没有初始化方法时被当作须要通过计算的。
本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.3.9
相关文章
相关标签/搜索