在打字稿0.9之后编辑:现在支持枚举:
enum Select { every, first, last }
原始问题:
这里讨论了打字稿中的枚举,但没有解决办法导致环境设计。环境枚举定义意味着枚举仅由编译器处理,而编译的js输出文件仅处理原始数值。就像在C ++ 11中一样。
我最接近的是
declare var Color = { red: 1, blue: 2, green: 3 } // DOES NOT COMPILE
但是编译器不接受这个:“Ambient变量不能有初始化器”。
修改
结合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中定义Color。 ts声明只是声称js中有一些Color对象,而事实上,没有定义,没有。我解决了这个问题,我们可以添加
var Color = {
Red: 1,
Green: 2,
Blue: 3
};
但是现在enum实现不是“环境”,因为typescript编译器执行C ++编译器所做的事情,将所有出现的枚举值减少为普通数字。 当前的环境声明允许进行类型检查,但不允许进行此类替换。
答案 0 :(得分:4)
TypeScript 0.9允许这样:
declare module A { export enum E { X, Y, Z } }
答案 1 :(得分:2)
添加答案,因为有从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 = {}));
这是一个const enum:
//TypeScript:
const enum ConstantEnum { FirstItem, SecondItem, ThirdItem };
//Compiled javascript:
;
答案 2 :(得分:1)
你可以这样做:
declare var Color: { Red: number; Green: number; Blue: number; };
请记住,通过设计 环境声明对代码输出 没有影响。所以某处你需要实际声明Color和每个枚举成员的值。