如何调用具有可选参数的TypeScript方法?
VSCode类有两种方法,如下所示:如何调用具有可选参数的TypeScript方法?,typescript,optional-parameters,Typescript,Optional Parameters,VSCode类有两种方法,如下所示: translate(lineDelta?: number, characterDelta?: number): Position translate(change: {characterDelta: number, lineDelta: number}): Position 我想称之为只提供一个characterDelta。我试着这样做: let endPos = startPos.translate(characterDelta: error.locat
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'.
我认为第一个重载的参数上的
?
的用途意味着它们是可选的,我可以只提供我需要的参数。不是这样吗?调用方法时,您不需要命名参数,但根据签名,您还需要提供第一个可选参数,因此它应该类似于:
let lineDelta: number = ...
let endPos = startPos.translate(lineDelta, error.location.length);
或:
可选参数可能是可选的,但如果要传递第二个可选参数,则还需要传递第一个。因此,这些是有效的(根据签名):
调用方法时,您不命名参数,但根据签名,您还需要提供第一个可选参数,因此它应该类似于:
let lineDelta: number = ...
let endPos = startPos.translate(lineDelta, error.location.length);
或:
可选参数可能是可选的,但如果要传递第二个可选参数,则还需要传递第一个。因此,这些是有效的(根据签名):
它需要具有characterDelta和lineDelta属性的对象
let endPos = startPos.translate({characterDelta: error.location.length, lineDelta: 5});
它需要具有characterDelta和lineDelta属性的对象
let endPos = startPos.translate({characterDelta: error.location.length, lineDelta: 5});
第二个重载可以,但我尝试使用第一个(
translate(lineDelta?:number,characterDelta?:number):Position
)第二个重载可以,但我尝试使用第一个(translate(lineDelta?:number,characterDelta?:number):Position
),因此在本例中,将第一个参数标记为可选参数有什么意义?(调用translate方法不进行翻译是毫无意义的,甚至记录为只返回this
):-/好问题,我不知道,也许是谁设计了这个api,认为可能有一些场景是方便的。那么在这种情况下,将第一个参数标记为可选参数有什么意义?(调用translate方法不进行翻译是毫无意义的,甚至记录为只返回this
):-/好问题,我不知道,也许设计这个api的人认为可能有一些场景是方便的。