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