2016-07-31 57 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') –

相关问题