如何调用这个具有可选参数的 TypeScript 方法?

How do I call this TypeScript method that has an optional argument?

VSCode Position class 有两种方法,如下所示:

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 characterDelta: number = ...
let endPos = startPos.translate({
    characterDelta: characterDelta, 
    lineDelta : error.location.length
});

可选参数可能是可选的,但如果要传递第二个可选参数,则还需要传递第一个参数。
所以这些都是有效的(根据签名):

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

它需要一个具有 characterDeltalineDelta 属性的对象。

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