TypeScriptでクラスのプロパティをどのようにループできますか?例として次のクラスを取り上げます。
export class Task implements Itask {
public Id: number = 0;
public Name: string;
public Description: string;
public Completed: boolean = false;
public TaskType: TaskType;
}
Imはプロパティを取得したいので、["Id"、Name "、" Description "、" Completed "、" TaskType "]
試した
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;
};
残念ながら、成功せずに、「TodoApp.Task.arguments」の使用は間違っています。しかし、誰かが正しい方法を教えてくれますか?
すべての「定義されていない」プロパティ、つまり、TypeScriptクラスで定義されているすべてのプロパティを考えてみましょう(以下で明らかになる理由でundefined
ではなく「定義されていない」と書きました)
_class A {
prop1: string
prop2: number
}
_
autogen javascriptはこれらのプロパティを認識しないため、_Object.keys
_またはthis.hasOwnProperty(k)
のいずれによっても列挙されません。 TypeScriptクラスを作成するときのオプションは1つだけです。つまり、すべてのプロパティを次のようなデフォルト値に初期化します。
_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
_を使用してそれらを検査します。
JavaScriptオブジェクトをループまたは列挙するにはどうすればよいですか を参照してください
あなたの場合、次のようなものです:
for (var i in TodoApp.Task) {
if (TodoApp.Task.hasOwnProperty(i)) {
var th = $('<th />').append(TodoApp.Task[i]);
tHead.append(th);
}
}