web-dev-qa-db-ja.com

クラス型プロパティを介したループ型スクリプト

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」の使用は間違っています。しかし、誰かが正しい方法を教えてくれますか?

19
meji

すべての「定義されていない」プロパティ、つまり、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_を使用してそれらを検査します。

11
loretoparisi

JavaScriptオブジェクトをループまたは列挙するにはどうすればよいですか を参照してください

あなたの場合、次のようなものです:

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