2016-07-31 3 views
0

Die VSCode Position Klasse hat zwei Methoden, die wie folgt aussehen:Wie rufe ich diese TypScript-Methode auf, die ein optionales Argument hat?

translate(lineDelta?: number, characterDelta?: number): Position 
translate(change: {characterDelta: number, lineDelta: number}): Position 

Ich möchte nur eine characterDelta Versorgung nennen. Ich habe versucht, dies zu tun:

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

Jedoch habe ich diesen Fehler:

Cannot find name 'characterDelta'. 

ich den Zweck der ? auf die Argumente für die erste Überlastung dachte gemeint waren sie optional und ich konnte nur die eine liefern Ich brauchte. Ist das nicht der Fall?

Antwort

2

Wenn der Aufruf einer Methode Sie den Parameter nicht benenne, aber nach Ihnen auf die Unterschrift müssen auch den ersten optionalen Parameter liefern, so sollte es sein, so etwas wie:

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

Oder:

Optionale Parameter sind möglicherweise optional, aber wenn Sie den zweiten optionalen Parameter übergeben möchten, müssen Sie auch den ersten übergeben.
Das sind also gültig (nach der Unterschrift):

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

In diesem Fall, was ist der Punkt des ersten Arguments als optional markiert? (Eine Übersetzungsmethode aufzurufen, um keine Übersetzung zu machen, ist sinnlos und sogar dokumentiert, wenn man 'this' zurückgibt): -/ –

+0

Gute Frage, ich habe keine Ahnung, vielleicht hat jemand diesen api-Gedanken entworfen, dass es vielleicht Szenarien gibt, in denen es praktisch ist . –

0

Es erwartet Sie ein Objekt mit dem characterDelta und lineDelta Eigenschaften.

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

Die zweite Überladung funktioniert, aber ich habe versucht, die erste zu verwenden ('translate (lineDelta ?: number, characterDelta ?: number): Position') –

Verwandte Themen