在 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 中有一些 Color 对象,而实际上,没有定义,就没有。Ti 修复这个我们可以添加
var Color = {
Red: 1,
Green: 2,
Blue: 3
};
但是现在枚举实现不是“环境”的,因为打字稿编译器做了 C++ 编译器所做的事情,将所有出现的枚举值减少为纯数字。当前的环境声明允许类型检查,但不允许替换。