Typescript 类型脚本对象工厂

Typescript 类型脚本对象工厂,typescript,Typescript,我试图在TypeScript中构建一个对象工厂,其中生成的对象必须有一个公共的基类型,但我还没有弄清楚如何正确编码它 这是我当前的尝试,它是不正确的,因为TypeScript说T不能保证是Base类型 class Base { constructor() {} } class User extends Base { constructor() { super() } } class Post extends Base { constructo

我试图在TypeScript中构建一个对象工厂,其中生成的对象必须有一个公共的基类型,但我还没有弄清楚如何正确编码它

这是我当前的尝试,它是不正确的,因为TypeScript说T不能保证是Base类型

class Base {
    constructor() {}
}


class User extends Base {
    constructor() {
        super()
    }
}

class Post extends Base {
    constructor() {
        super()
    }
}

function buildObject<T extends Base>(type: typeof Base): T {
    return new type()
}
类基{
构造函数(){}
}
类用户扩展基{
构造函数(){
超级()
}
}
类职位扩展基础{
构造函数(){
超级()
}
}
函数buildObject(类型:typeof Base):T{
返回新类型()
}
我想我可以创建一个新类型,比如
typebaseinstance=T extends Base
,在这里使用:

function buildObject<T>(type: typeof BaseInstance<T>): BaseInstance<T> {
    return new type()
}
函数buildObject(类型:typeof BaseInstance):BaseInstance{
返回新类型()
}

但是此构造
type BaseInstance=T extends Base
无效。

尝试定义一个可以通过
new
关键字调用的类型BaseConstructor,并返回一个Base实例。您的类Base、User和Post都满足此类型定义

type BaseConstructor<T extends Base> = new() => T;

function buildObject<T extends Base>(type: BaseConstructor<T>): T {
    return new type();
}

const myObj: Post = buildObject(Post);
type BaseConstructor=new()=>T;
函数buildObject(类型:BaseConstructor):T{
返回新类型();
}
constmyobj:Post=buildObject(Post);

使用
type:new()=>T
而不是
type:typeof Base
作为
buildObject
参数。