使用在循环中获取元素的数组时出现Typescript错误

使用在循环中获取元素的数组时出现Typescript错误,typescript,Typescript,一个说明我正在做什么的基本用例: class-Foo{ 公共构造函数(arg1:编号,arg2:编号){ console.log(arg1); console.log(arg2); } } 函数foo(测试:编号):编号[]{ 设args:number[]=[]; for(设i=0;i

一个说明我正在做什么的基本用例:

class-Foo{
公共构造函数(arg1:编号,arg2:编号){
console.log(arg1);
console.log(arg2);
}
}
函数foo(测试:编号):编号[]{
设args:number[]=[];
for(设i=0;i<2;i++){
args.push(i);
}
如果(args.length!==2){
抛出新错误(“参数长度无效”);
}
返回新的Foo(…args);
}
console.log(foo(1));
尝试运行此操作时,我得到:

error TS2556: Expected 2 arguments, but got 0 or more.

16   return new Foo(...args);

我完全无法确定要去哪里解决此问题。

以下是您遇到的错误:

class Foo {
  public constructor(arg1: number, arg2: number) {
  }
}

declare let args: number[];
new Foo(...args); // expected 2 but got 0 or more. 
为什么? 因为
number[]
可以是长度
0
或大于2的数组。因此它与
[number,number]
不匹配,即长度正好为2的数组

修理 注释为元组
[number,number]

declare let args: [number,number];
new Foo(...args); // Ok
或者从您自己的数组中获取值:

new Foo(args[0],args[1]);

因此,如果我有一些不同的类,它们都接受不同数量的参数,那么这里没有真正的方法对参数使用变量扩展,因为我总是必须将其注释为适当长度的元组,或者注释为
any
。当您想进行本地化的魔法编码施法或注释时,可以使用受控的方式,因为
任何
似乎都没有什么区别。除了使用
Reflect.construct()
(在IE中不起作用)之外,我想转换为特定长度的元组是唯一的方法。我发现您可以将类本身转换为任何:
new(Foo as any)(…args)