2016-07-31 2 views
0

VSCode Position класс имеет два метода, которые выглядят следующим образом:Как мне вызвать этот метод TypScript, который имеет необязательный аргумент?

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

Я хочу назвать его подачи только characterDelta. Я попытался сделать это:

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

Однако я получаю эту ошибку:

Cannot find name 'characterDelta'. 

я понял цель ? на аргументы для первой перегрузки означало, что они были необязательными и я мог только предоставить один Мне было нужно. Разве это не так?

ответ

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 
}); 

Дополнительные параметры могут быть необязательными, но если вы хотите передать второй необязательный параметр, вам также необходимо передать первый.
Так они действуют (по подписи):

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

В этом случае, какова точка первого аргумента, отмеченного как необязательная? (Вызов метода перевода для перевода не бесполезен и даже документирован как просто возвращающий этот вопрос): -/ –

+0

Хороший вопрос, я понятия не имею, возможно, кто когда-либо создавал эту апи, думал, что, возможно, есть сценарии, в которых удобно , –

0

Он ожидает, что объект с characterDelta и lineDelta свойствами.

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

Вторая перегрузка делает, но я пытался использовать первый ('translate (lineDelta ?: number, characterDelta ?: number): Position') –