2016-07-31 6 views
0

VSCode Positionクラスは、次のようになり二つの方法があります。私はこれをやってみました:オプションの引数を持つこのTypScriptメソッドをどのように呼び出すのですか?私はcharacterDeltaを供給、それを呼びたい</p> <pre><code>translate(lineDelta?: number, characterDelta?: number): Position translate(change: {characterDelta: number, lineDelta: number}): Position </code></pre> <p>:

let endPos = startPos.translate(characterDelta: error.location.length); 

私はこのエラーを取得するしかし:

Cannot find name 'characterDelta'. 

私は最初のオーバーロードの引数に?の目的は、彼らがオプションだった意味考え出し、私はちょうど1を提供することができます必要だった。これは当てはまりませんか?

答えて

2

あなたは、パラメータに名前を付けていないメソッドを呼び出すことができますが、同様に最初のオプションのパラメータを指定する必要が署名に応じて、それがあるべき何かのように:

let lineDelta: number = ... 
let endPos = startPos.translate(lineDelta, error.location.length); 

または:

let characterDelta: number = ... 
let endPos = startPos.translate({ 
    characterDelta: characterDelta, 
    lineDelta : error.location.length 
}); 

オプションのパラメータは任意ですが、2番目のオプションのパラメータを渡す場合は、最初のパラメータも渡す必要があります。
は、したがって、これらは、(署名に応じて)有効である:

startPos.translate(); 
startPos.translate(lineDelta); 
startPos.translate(lineDelta, characterDelta); 
+0

この場合、最初の引数のポイントはオプションとしてマークされますか? -/ –

+0

良い質問ですが、私は考えていないかもしれません。多分、このAPIを設計した人は、おそらく便利なシナリオがあるかもしれないと考えました。 –

0

それはcharacterDeltalineDelta特性を持つオブジェクトを期待します。

let endPos = startPos.translate({characterDelta: error.location.length, lineDelta: 5}); 
+0

2番目のオーバーロードはありますが、最初のものを使用しようとしていました( 'translate(lineDelta ?: number、characterDelta ?: number):Position') –

関連する問題