我有一个函数,它使用给定的构造函数实例化一个对象,并传递任何参数。
function instantiate(ctor:Function):any {
switch (arguments.length) {
case 1:
return new ctor();
case 2:
return new ctor(arguments[1]);
case 3:
return new ctor(arguments[1], arguments[2]);
...
default:
throw new Error('"instantiate" called with too many arguments.');
}
}
它的用法如下:
export class Thing {
constructor() { ... }
}
var thing = instantiate(Thing);
这样可行,但编译器会抱怨每个new ctor
实例,说Cannot use 'new' with an expression whose type lacks a call or construct signature.
。 ctor
应该包含哪种类型?
答案 0 :(得分:19)
我会这样写(以泛型作为奖励):
function instantiate<T>(ctor: { new(...args: any[]): T }): T {
答案 1 :(得分:0)
当我的类型被包装在一个模块中时,我也遇到了这个错误,我在模块上调用new而不是类型。这个Q&amp; A帮助我排除了一些事情,然后我意识到经过漫长的一天编程之后,这是非常愚蠢的事情。