2016-07-31 56 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

所以在這種情況下,第一個參數被標記爲可選的點是什麼? (調用翻譯方法做不翻譯是毫無意義的,甚至記錄爲只是返回'this'): -/ –

+0

好問題,我不知道,也許有人曾設計過這個api,認爲可能有方便的方法。 –

0

它希望與characterDeltalineDelta屬性的對象。

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

第二個重載確實,但我試圖使用第一個('translate(lineDelta ?: number,characterDelta ?: number):Position') –

相關問題