在TypeScript中编译枚举

时间:2015-09-30 16:23:11

标签: typescript

enum在运行时在TypeScript中变成了什么?

Fruit.ts

enum Fruit {APPLE, ORANGE};

main.ts

var bowl = [Fruit.APPLE, Fruit.ORANGE];
console.log(bowl);

生成的main.js文件与.ts保持一致,但无法正常工作。

2 个答案:

答案 0 :(得分:7)

该代码的JS将是:

// Fruit.js
var Fruit;
(function (Fruit) {
    Fruit[Fruit["APPLE"] = 0] = "APPLE";
    Fruit[Fruit["ORANGE"] = 1] = "ORANGE";
})(Fruit || (Fruit = {}));

// main.js
var bowl = [Fruit.APPLE, Fruit.ORANGE];
console.log(bowl);

您可能正在寻找const enum

const enum Fruit {APPLE, ORANGE};

如果你使用它,那么enum的值将被内联到JavaScript:

// Fruit.js: empty.. nothing will be in here

// main.js
var bowl = [0 /* APPLE */, 1 /* ORANGE */];
console.log(bowl);

当您的应用程序中没有必要生成常规枚举的JS代码时,您可以使用const enum

答案 1 :(得分:-1)

如果您想在fruit.ts之外使用Fruit,那么您需要将其导出...

export enum Fruit {APPLE, ORANGE};

在您想要使用它的另一个文件中,您需要引用它...

import {Fruit} from './fruit';
var bowl = [Fruit.APPLE, Fruit.ORANGE];
// btw, love the name "bowl" here

此外,为了使用import,您需要在tsconfig.json中指定模块类型(或通过cmd行参数)