Looping through an enum, TypeScript and JQuery
你好,我正在尝试使用typescript和jquery开发一个直接的todo应用程序。我有一个列举任务类型的枚举:
1 | export enum TaskType { FrontEnd, BackEnd, Designer }; |
但是,使用jquery.each或for循环在EMUM中循环,我得到以下结果(值,然后是索引):
1 | FrontEnd, BackEnd, Designer, 0, 1, 2 |
下面是通过枚举循环的代码i:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | constructor(e?: Object) { var template = this.FormTemplate; $(e).append(template); var sel = template.find('select'); /*$.each(TaskType, function (index, el) { sel.append("<option value='" + index +"'>" + el +"</option>"); });*/ for(var i=0; i < (typeof TaskType).length; i++){ sel.append("<option value='" + TaskType[i] +"'>" + TaskType[i] +"</option>"); } } |
有人能告诉我这是为什么吗?
当编译成Plain JS同时包含符号名称和数值作为属性,并解释为什么你得到
从这篇文章中,你可以看到一个典型的ENUM编译成JS。
如果你有这个类型:
1 2 | //TypeScript declaration: enum StandardEnum {FirstItem, SecondItem, ThirdItem}; |
It compiles to this Javscript:
ZZU1
Which is essentially this result:
1 2 3 4 5 6 7 8 | var StandardEnum = { "FirstItem": 0, "SecondItem": 1, "ThirdItem": 2, "0":"FirstItem", "1":"SecondItem", "2":"ThirdItem" }; |
所以,除非你具体地不知道数字属性,否则就没有办法只填写ENUM的名称。
你可以这样做:
1 2 3 4 5 | for (var item in StandardEnum) { if (StandardEnum.hasOwnProperty(item) && !/^\d+$/.test(item)) { console.log(item); } } |
Working Demo:http://jsfiddle.net/jfriend00/65cfg88u/。
FYI,如果你真正想要的是:
1 2 3 4 5 | var StandardEnum = { "FirstItem": 0, "SecondItem": 1, "ThirdItem": 2 }; |
然后,也许你不应该使用ENUM,而只是使用这个标准JS声明。然后,你可以得到