web-dev-qa-db-fra.com

Lecture en boucle des propriétés de type de classe

Comment peut-on parcourir les propriétés d'une classe en TypeScript? Prenons l'exemple du cours suivant:

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

Je veux récupérer les propriétés, d'où: ["Id", Nom "," Description "," Terminé "," TaskType "]

A tenté

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

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

  console.log(tHead);

  return tHead;
};  

Malheureusement sans succès, je sais que l'utilisation de "TodoApp.Task.arguments" est incorrecte. Cependant, quelqu'un peut-il me montrer la bonne façon s'il vous plaît?

19
meji

Considérons que toutes les propriétés "non définies" c'est-à-dire toutes les propriétés qui sont définies dans la classe TypeScript comme (j'ai écrit "non défini" et non undefined pour une raison qui sera claire ci-dessous)

class A { 

   prop1: string
   prop2: number

} 

ne sera pas énuméré par Object.keys ou this.hasOwnProperty(k) car l'autogen javascript n'a aucune connaissance de ces propriétés. Vous n'avez qu'une seule option, lorsque vous créez votre classe TypeScript, qui est d'initialiser toutes les propriétés aux valeurs par défaut comme

class A { 

   prop1: string
   prop2: number
   prop3: B

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

} 

À ce stade, vous obtiendrez toutes les propriétés de l'instance A comme dans cette itération de mappage à partir d'un dictionnaire

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

Si vous n'aimez pas la solution des valeurs par défaut, vous pouvez toujours le faire en utilisant le mot clé magique undefined javascript pour que vous puissiez:

class A { 

   prop1: string = undefined
   prop2: number = undefined

} 

À ce stade, l'homologue javascript aura toutes les propriétés dans le modèle et vous les itérerez avec Object.keys(this) ou les inspecterez via le this.hasOwnProperty

11
loretoparisi

Voir Comment parcourir ou énumérer un objet JavaScript?

Dans votre cas, quelque chose comme:

for (var i in TodoApp.Task) {
    if (TodoApp.Task.hasOwnProperty(i)) {
        var th = $('<th />').append(TodoApp.Task[i]);
        tHead.append(th);
    }
}
9
Roy J