2016-10-10 4 views
2

で相互にオプションのparamを制約するためにどのように私はtypescriptです

 private map(model: Model, id?: number, someVariable?:number) {... } 

私の問題はidが、その後存在する場合someVariableが存在しなければならないということである以下の機能を持っています。そうでない場合、このメソッドのロジックは機能せず、例外が発生します。

解決策の1つは、クラス内の2つの変数を設定することです。しかし、私はタイコにそのような能力があるのだろうかと思っています。

私はTypescript 2.0.3を使用しています。

+0

なぜあなただ​​けの例外をスローしていないのですか? 'if(id &&!someVariable){例外をスロー}' –

+0

ああ、例外があります。それのどこが悪いんだい?それはそのメソッドの悪用なので、例外を発生させる必要があります、imho –

+0

@HerrDerb私はちょうどよりエレガントな方法を求めています。 – hex

答えて

3

あなたはこのためfunction overloadingを使用することができます。

map(model: Model); 
map(model: Model, id: number, someVariable:number); 
map(model: Model, id?: number, someVariable?:number) { 
    //implementation 
} 

そして、実際の実装の署名が呼び出すことはできません。

this.map(m); //valid 
this.map(m, 1, 2); //valid 
this.map(m, 1); //error