Enums 有没有办法在typescript中创建环境枚举?
typescript 0.9发布后编辑:现在支持枚举: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 但编译器不接受以下内容:“环境变量不能
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
};
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:
;
这篇博文详细解释了这一点: