2015-12-14 279 views
3

外面值误差希望这可能会产生一个编译时错误,但我想我刚才误会枚举是如何工作的?没有打字稿枚举

enum SortDirection { 
    ascending = 1, 
    descending = -1 
} 
type IndexSpec = {[index: string]: SortDirection}; 

var i: IndexSpec = {thing: 3}; // no compile time error 

回答

3

所有数值都被视为值枚举值。

这是允许的,因为有标志和非标志枚举之间没有区别:

enum MyFlags { 
    Cool = 0x1, 
    Awesome = 0x2, 
    Neat = 0x4 
} 

var i: MyFlags = 5; // Cool | Neat 
+0

辉煌,感谢瑞安。我猜“答案是”因为没有区分标志和非标志枚举“在源代码的某处暗示,或者可能在[language spec]中(https://github.com/Microsoft/TypeScript/blob/ master/doc/spec.md#9),但我错过了它。不管怎么说,还是要谢谢你。你知道有什么方法可以实现我在这个问题上想要达到的目标吗?不用担心,如果不是:)再次感谢! – AJP

+1

我想不出在编译时确保一个数字在枚举中的方法。当使用枚举时,如果这是危险,最好不要使用数字文字。 –