Цифры цикла через свойства класса

Как можно пропустить свойства класса в TypeScript? Возьмем следующий класс, например:

export class Task implements Itask {
        Id : number = 0;
        Name: string;
        Description: string;
        Completed: boolean = false;
        TaskType: TaskType;
}

Im хочет получить свойства, следовательно: ["Id", Name "," Описание "," Completed "," TaskType "]

Пытался

    GetTaskHeaders = () => {
        var _self = this;
        var tHead = $('<thead />').append('<tr />');

        for(var i=0; typeof TodoApp.Task.arguments; i++){ 
            var th = $('<th />');
            th.append(TodoApp.Task.arguments[i]);
            tHead.append(th);
        }

        console.log(tHead);

        return tHead;
    }

К сожалению, без успеха я знаю, что использование "TodoApp.Task.arguments" неверно. Однако, может ли кто-нибудь показать мне правильный путь, пожалуйста?

Ответ 1

Давайте рассмотрим, что все "неопределенные" свойства, т.е. Все свойства, которые определены в классе типов типов (я написал "не определен" и не был undefined по причине, которая будет ясна ниже)

class A { 

   prop1: string
   prop2: number

} 

не будет перечисляться ни одним из Object.keys или this.hasOwnProperty(k) поскольку JavaScript- this.hasOwnProperty(k) не знает этих свойств. У вас есть только один вариант, когда вы создаете свой класс типов, то есть для инициализации всех свойств по умолчанию, например

class A { 

   prop1: string
   prop2: number
   prop3: B

   constructor() {
     this.prop1="";
     this.prop2=-1;
     this.prop3=null;
   }

} 

На этом этапе вы получите все свойства экземпляра A как в этой итерации отображения из словаря

var a = new A();
for (var i in properties) {
   if (a.hasOwnProperty(i)) {
      a[i]=properties[i];
   }
}

Если вам не нравится решение по умолчанию, вы все равно можете это сделать, используя ключевое undefined ключевое слово javascript, чтобы вы это сделали:

class A { 

   prop1: string = undefined
   prop2: number = undefined

} 

В этот момент javascript-копия будет иметь все свойства в модели, и вы будете перебирать их с помощью Object.keys(this) или проверять их через this.hasOwnProperty