日々精進

新しく学んだことを書き留めていきます

typescriptでreflection

typescriptはコンパイルすると素のJSになり型情報がなくなるのでReflectionは基本できない。 for inを使うとプロパティの列挙は出来るがtypescriptのフィールドはそこにデータを代入するまで存在しないのでfor inを実行しても出てこない。

// thisはsampleFieldという名前のフィールド定義を持つクラスのオブジェクトとする
for(var key in this) {
  console.log(key + " > " + this[key]); // sampleFieldという名前は出てこないことがある(sampleFieldに値が代入されたら出てくる)
}

実行時にフィールドの型情報を知りたい場合はフィールド名と型名のペアを定義しておく必要がある。例は以下。

  getProperties(): { [key: string]: string; } {
    return {
      "user": "User",
      "zip1": "string",
    };
  }

フィールド定義と二重管理になるが。。しょうがなさそう

参考: