Typescript 类型脚本:不能使用';新';其类型缺少调用或构造签名的表达式

Typescript 类型脚本:不能使用';新';其类型缺少调用或构造签名的表达式,typescript,Typescript,我有一个函数,它用给定的构造函数实例化一个对象,传递任何参数 function instantiate(ctor:Function):any { switch (arguments.length) { case 1: return new ctor(); case 2: return new ctor(arguments[1]); case 3: return new

我有一个函数,它用给定的构造函数实例化一个对象,传递任何参数

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);
这是可行的,但是编译器会抱怨每个
新的ctor
实例,说
不能将“new”与类型缺少调用或构造签名的表达式一起使用。
ctor
应该有什么类型?

我会这样写(加上泛型):

函数实例化(ctor:{new(…args:any[]):T}):T{

当我的类型被包装在一个模块中时,我也遇到了这个错误,我在模块上调用new而不是type。这个问答帮助我排除了一些事情,然后我意识到在漫长的一天编程之后,这是一件相当愚蠢的事情。

我也是。你能给我一个提示,有人可以在哪里找到一些关于它的文档吗端口与导出默认问题?我不再使用此代码库,而且它是很久以前的事了,我记不起来了。对不起,我可以问一下您为什么要问这个问题吗?因为我有一个类似的问题,它是修复的,因为我试图使用导出类,就像它是默认导出一样,例如从“bar”导入foo;但是foo是一个常规的导出,所以我需要从“bar”导入{foo},或者交替地将导出更改为默认导出(这就是我所做的),这听起来对我的问题有些熟悉,除了我没有更改默认导出之外,我更改了导入端。
function instantiate<T>(ctor: { new(...args: any[]): T }): T {