TypeScript 泛型创建实例

TypeScript generics create instace

我正在尝试创建一个工厂以使用泛型实例化我的 classes。检查 TypeScript docs 一切正常。简而言之,这很好用:

class Person {
    firstName = 'John';
    lastName = 'Doe';
}

class Factory {
    create<T>(type: (new () => T)): T {
        return new type();
    }
}

let factory = new Factory();
let person = factory.create(Person);

console.log(JSON.stringify(person));

现在在directory中定义class个人:

export class Person extends BasePerson {
    firstName = 'John';
    lastName = 'Doe';
}

当我从其他包导入 Person 时:

import { Person } from "./directory"

class Factory {
    create<T>(type: (new () => T)): T {
        return new type();
    }
}

let factory = new Factory();
let person = factory.create(Person);

我收到错误: Argument of type 'typeof Person' is not assignable to parameter of type 'new () => Person'

如何获得 Person 而不是 typeof Person 的值?

使用 TypeScript 3.7.2 和 Node v10.13.0。

你能帮我试试这个吗?

import { Person } from "./directory"

class Factory {
    create<T>(type: (new () => T)): T {
        return new type();
    }
}

let factory = new Factory();
let person = factory.create(new Person);

这里的实际问题是 Person 的父 class -> BasePersonBasePerson 期望其构造函数中有一个参数,因此当我尝试调用 factory.create(Person) 时,Person 实际上是一个 typeof 因为它期望基 class 构造函数有一个参数.通过删除基础 class 中的构造函数并通过 ioc 容器注入 属性 来解决问题,在我的例子中是 Inversify