2017-08-23 11 views
3

でパラメータを評価し、私は、パラメータとしてオブジェクトにインスタンスを作成した後、二つのことを達成したいと思います:は、クラスのコンストラクタ

まず、それがであれば、パラメータのプロパティを反復し、インスタンスに追加しますちょうどコンストラクタの上に宣言されたこのプロパティの方法と同じ型。私はこれを一度にチェックしなければならないのですか?

第2に、宣言された各プロパティが定義されているかどうかを確認し、そうでない場合はデフォルト値を設定したいと考えています。

var data = { 
    langs: ["de","en","fr"], 
    lesson: { 
    de: "Einführung", 
    en: "Introduction" 
    }, 
    keywords: [] 
} 

class Video { 
    langs: Array<string>; 
    lesson: object; 
    topic: object; 
    intro: object; 
    keywords: Array<Keyword>; 

    constructor (data) { 
    for (let prop in data) { 
     if (/*data.s is of type as declared above constructor()*/) { 
     this[prop] = data[prop]; 
     } else { 
     throw "Type of {{prop}} is invalid"; 
     } 
    } 
    for (let prop in /*All the props defined above constructor()*/) { 
     if (!this.hasOwnProperty(prop)) { 
     //Set default value; 
     } 
    } 
    } 
} 

var video = new Video(data); 
+1

いいえ、あなたが求めて何のどちらを実行する方法はありません。その理由は、プロパティ名とそのタイプの両方がコンパイルプロセス後に失われるからです。あなた自身またはデコレータ(メタデータ)のどちらかでコードの一部としてその情報を保存する必要があります –

+0

これは可能ですが、追加の検査が必要です。例えばObject型のarの配列。 – cgTag

答えて

0

そうする簡単な方法はあります私は1で、このいずれかをチェックしなければならないのですか。

タイプアノテーションを使用してください。

constructor (data: { langs : string[] /* so on */}) { 

constructor (data) { 

を変更私は宣言されたプロパティのそれぞれが定義されているかどうかを確認していない場合は、デフォルト値を設定したいです。

使用strictNullChecksあなたのコードのうち、ロジックを移動する:https://basarat.gitbooks.io/typescript/content/docs/options/strictNullChecks.html