使用Spread运算符时TypeScript错误?

时间:2017-07-20 21:02:53

标签: typescript visual-studio-code

enter image description here 每当我使用扩展运算符时,如下面的

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在使用spread运算符传递参数时会出错?

当我实际运行代码时没有错误,扩展运算符只是让我使用数组作为函数的参数但在VSCode中它向我显示错误,好像我不能。< / p>

3 个答案:

答案 0 :(得分:8)

仅当所有参数都标记为可选

时,

类型扩展运算符才有效

public drawTextTest(p1?: number, p2?: number, p3?: number):void {

请参阅switching to NUL delimiters

答案 1 :(得分:4)

较新版本的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 );

答案 2 :(得分:1)

Vscode可能在2.1之前使用了一个版本的typescript来评估代码。仔细检查IDE窗口右下角的版本。

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

编辑:drawInfo似乎是一个数组。因为数组的长度可以改变,并且没有任何东西可以保证有3个属性,所以ts评估者会抱怨。

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