使用Spread运算符时TypeScript错误?

Lat*_*ift 12 typescript visual-studio-code

在此输入图像描述 每当我使用下面的扩展运算符时

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

我在编辑器中收到此错误

[ts]预期的#参数,但至少得到0.

使用spread运算符传递参数时,为什么TypeScript会出错?

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

gpi*_*ino 9

类型扩展运算符仅在所有参数都标记为可选时才起作用

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

请参阅https://github.com/Microsoft/TypeScript/issues/4130#issuecomment-303486552


小智 6

较新版本的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 );
Run Code Online (Sandbox Code Playgroud)

  • 这更符合我的想法,但 TS 仍然给出相同的错误 (4认同)
  • 2020 年也是如此,我认为这肯定有效,但它给出了相同的错误 (3认同)