Hola estoy tratando de t desarrollar una recta hacia adelante tareas de la aplicación utilizando la Máquina y JQuery. Tengo una enumeración que las listas de los tipos de tareas:

export enum TaskType { FrontEnd, BackEnd, Designer };

Sin embargo bucle a través de la emum usando jquery.cada uno o bucle for, me da el siguiente resultado, (valores de índices):

        FrontEnd, BackEnd, Designer, 0, 1, 2

El siguiente es el código que el bucle a través de la enumeración:

        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>");
            }

        }

Alguien me puede decir por qué es esto?

OriginalEl autor meji | 2015-06-04

1 Comentario

  1. 20

    Transcripción de las enumeraciones cuando se compila en la llanura JS contener el nombre simbólico Y la forma de valores numéricos de las propiedades y que explica por qué usted obtener FrontEnd, BackEnd, Designer, 0, 1, 2 al intentar enumerar las propiedades del objeto. Que yo sepa, no hay ningún post-compilar para enumerar sólo los nombres simbólicos. Usted podría enumerar todos ellos y omitir nada de lo que es un número.

    De este artículo, usted puede ver exactamente cómo un Manuscrito enum compila en JS.

    Si usted tiene este Manuscrito:

    //TypeScript declaration:
    enum StandardEnum {FirstItem, SecondItem, ThirdItem};

    Se compila a esto Javascript:

    //Compiled javascript:
    var StandardEnum;
    (function (StandardEnum) {
        StandardEnum[StandardEnum["FirstItem"] = 0] = "FirstItem";
        StandardEnum[StandardEnum["SecondItem"] = 1] = "SecondItem";
        StandardEnum[StandardEnum["ThirdItem"] = 2] = "ThirdItem";
    })(StandardEnum || (StandardEnum = {}));
    ;

    Que es esencialmente este resultado:

    var StandardEnum = {
        "FirstItem": 0,
        "SecondItem": 1,
        "ThirdItem": 2,
        "0": "FirstItem",
        "1": "SecondItem",
        "2": "ThirdItem"
    };

    Así que, a menos que usted específicamente ignorar las propiedades numéricas, no hay manera de enumerar sólo la enumeración de los nombres.

    Podrías hacerlo así:

     for (var item in StandardEnum) {
         if (StandardEnum.hasOwnProperty(item) && !/^\d+$/.test(item)) {
             console.log(item);
         }
     }

    Demo: http://jsfiddle.net/jfriend00/65cfg88u/


    Para su INFORMACIÓN, si lo que realmente quieres es:

    var StandardEnum = {
        "FirstItem": 0,
        "SecondItem": 1,
        "ThirdItem": 2
    };

    Entonces, tal vez usted no debe usar la enumeración y sólo tiene que utilizar esta norma JS declaración. Entonces, usted puede obtener las propiedades con Object.keys(StandardEnum).

    Gracias por la explicación, pero no tiene sentido hacer para devolverlo como clave:objeto de valor?, esta es una gran decepción, de todos modos terminé usando : si(TaskType[i] !== no definido) en bucle for, ya que devuelve los valores, a continuación, los valores no definidos.
    usted puede devolver cualquier cosa que usted desee – sólo estaba mostrando cómo se pueden identificar sólo las propiedades con nombre. Para su INFORMACIÓN, tal vez usted sólo debe definir un JS objeto con las propiedades en lugar de una enumeración si eso es lo que queremos que sea.
    ¿Por qué el downvote? ¿Cómo es la respuesta mal?
    era la respuesta correcta
    Es posible que el trabajo para este caso en específico, pero podría depender de lo que los valores enum eran debido a casos especiales. No me gusta depender de tipo automático de la coerción y la coacción reglas para isNan() son bastante complicadas, ver aquí.

    OriginalEl autor jfriend00

Dejar respuesta

Please enter your comment!
Please enter your name here