Enums 有没有办法在typescript中创建环境枚举?

Enums 有没有办法在typescript中创建环境枚举?,enums,typescript,Enums,Typescript,typescript 0.9发布后编辑:现在支持枚举: enum Select { every, first, last } 原始问题: 这里讨论了typescript中的枚举,但没有解决方案导致环境设计。环境枚举定义意味着枚举仅由编译器处理,而编译的js输出文件仅处理原始数值。就像在C++11中一样 我最接近的是 declare var Color = { red: 1, blue: 2, green: 3 } // DOES NOT COMPILE 但编译器不接受以下内容:“环境变量不能

typescript 0.9发布后编辑:现在支持枚举:

enum Select { every, first, last }
原始问题:

这里讨论了typescript中的枚举,但没有解决方案导致环境设计。环境枚举定义意味着枚举仅由编译器处理,而编译的js输出文件仅处理原始数值。就像在C++11中一样

我最接近的是

declare var Color = { red: 1, blue: 2, green: 3 } // DOES NOT COMPILE
但编译器不接受以下内容:“环境变量不能有初始值设定项”

编辑
结合dmck的回答:

declare var Color: { Red: number; Green: number; Blue: number; };
这不会输出任何js代码。换句话说,它是环境的。然而,这也使得它毫无用处:

declare var Color: { Red: number; Green: number; Blue: number; };

function test() {
  var x = Color.Blue;    // null ref exception, no Color object
  console.log(x == Color.Red);
}
将产生运行时错误,因为js中未定义颜色。ts声明只是声称js中有一些颜色对象,而事实上,没有定义,就没有颜色对象。我可以补充一下

var Color = {
   Red: 1,
   Green: 2,
   Blue: 3
};

但是,在类型编译器实现C++编译器所做的意义上,枚举实现不是“环境”,在枚举数的所有发生中都减少枚举值。strong>当前的环境声明允许类型检查,但不允许此类替换。

您可以执行以下操作:

declare var Color: { Red: number; Green: number; Blue: number; };

请记住,通过设计环境声明对代码的输出没有影响。因此,您需要在某个地方实际声明每个枚举成员的颜色和值。

TypeScript 0.9允许:

declare module A { export enum E { X, Y, Z } }

添加一个答案,因为从TypeScript 1.4开始有了新的功能

使用
const enum
给出预期结果

这是一个普通枚举:

//TypeScript:
enum StandardEnum {FirstItem, SecondItem, ThirdItem};

//Compiled javascript:
var StandardEnum;
(function (StandardEnum) {
    StandardEnum[StandardEnum["FirstItem"] = 0] = "FirstItem";
    StandardEnum[StandardEnum["SecondItem"] = 1] = "SecondItem";
    StandardEnum[StandardEnum["ThirdItem"] = 2] = "ThirdItem";
})(StandardEnum || (StandardEnum = {}));
这是一个常量枚举:

//TypeScript:
const enum ConstantEnum { FirstItem, SecondItem, ThirdItem };

//Compiled javascript:
;
这篇博文详细解释了这一点: