循环使用枚举,TypeScript和JQuery

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同时包含符号名称和数值作为属性,并解释为什么你得到FrontEnd, BackEnd, Designer, 0, 1, 2时,类型提示。我最好知道,没有后编译的方法可以只计算符号名称。你可以调查他们和滑雪的任何东西,这是一个数字。

从这篇文章中,你可以看到一个典型的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声明。然后,你可以得到Object.keys(StandardEnum)的特性。