作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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);
}
会产生运行时错误,因为 Color 没有在 js 中定义。 ts声明只是声称js中有一些Color对象,而实际上没有定义,没有。 Ti修复这个我们可以添加
var Color = {
Red: 1,
Green: 2,
Blue: 3
};
但现在枚举实现不是“环境”,因为 typescript 编译器执行 C++ 编译器所做的事情,将所有出现的枚举值减少为纯数字。 当前的环境声明允许类型检查但不允许此类替换。
最佳答案
TypeScript 0.9 允许这样做:
declare module A { export enum E { X, Y, Z } }
关于enums - 有没有办法在环境的 typescript 中创建枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841443/
我是一名优秀的程序员,十分优秀!