使用展开运算符时出现TypeScript错误?

31

输入图像描述 无论何时我使用如下的扩展运算符

public drawTextTest(p1: number, p2: number, p3: number):void {
    console.log(p1, p2, p3);
}
let array = [2, 2, 5];
this.drawTextTest( ... array );

我在编辑器中遇到了这个错误

[ts] 预期#个参数,但最少得到0个。

TypeScript为什么在使用展开运算符将参数传递时会报错?

实际运行代码时并没有出错,展开操作符只是让我将数组作为函数的参数使用,但在VSCode中它显示了这个错误,似乎我不能这样做。


3
请尽量粘贴代码,而不是截图。 - Russley Shaw
代码编译后可以正常运行,但在编辑器中出现了错误。 - user8261439
2
tslib版本的VSCode较旧,无法推断元组。 - Meirion Hughes
3个回答

30

12

新版本的TypeScript应该通过流分析来解决这个问题,但是您可以通过手动将数组键入以下方式来确保代码正常工作以达到最小长度:

function drawTextTest(p1: number, p2: number, p3: number):void {
    console.log(p1, p2, p3);
}
let array: [number, number, number] = [2, 2, 5];
this.drawTextTest( ... array );

4
这更符合我的想法,但 TS 仍然会提示相同的错误。 - user8261439
4
同样的事情在2020年,我认为这肯定有效,但实际上它却产生了相同的错误。 - Christian Vincenzo Traina

1

如果您使用的是Vscode早于2.1版本的typescript来评估代码,请仔细检查IDE窗口右下角的版本。

如果我错了,我需要看到您的drawInfo对象定义。 我的第二个猜测是drawInfo具有可选属性,评估器看到扩展可能导致0个参数。

编辑:drawInfo似乎是一个数组。因为数组的长度可以更改,且没有保证有3个属性,因此ts评估器会发出警告。

如果drawInfo将始终包含3个值,则可以将其从数组更改为定义的类型,并避免使用扩展运算符。


1
VSCode正在运行TypeScript 2.4.2。我更新了我给出的示例,但仍然出现错误。 - user8261439
this.drawTextTest( ...(数组,类型为[任意, 任意, 任意] )) - Navid Yousefzai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接