Typescript 从泛型类的静态方法创建实例

Typescript 从泛型类的静态方法创建实例,typescript,Typescript,我想要一个基本模型: export class BaseModel<T> { public static create(obj:any):T { let instance = _.assignIn(new T(), obj); return instance; } } 但是,我不能强迫它工作并得到错误: “T”仅指类型,但在此处用作值 不能将泛型约束用作值,因为它在运行时中不存在,因此: new T() 毫无意义 您可以这样做: clas

我想要一个基本模型:

export class BaseModel<T> {
   public static create(obj:any):T {
      let instance = _.assignIn(new T(), obj);
      return instance;   
   }
}
但是,我不能强迫它工作并得到错误:

“T”仅指类型,但在此处用作值


不能将泛型约束用作值,因为它在运行时中不存在,因此:

new T()
毫无意义

您可以这样做:

class BaseModel {
    public static create<T extends BaseModel>(obj: any): T {
        let instance = Object.assign(new this(), obj);
        return instance;
    }
}
类基本模型{
公共静态创建(对象:任意):T{
让instance=Object.assign(newthis(),obj);
返回实例;
}
}
()

然后

让myModel=myModel.create(…);

将正常工作。

您不能将通用约束用作值,它在运行时不存在,因此:

new T()
毫无意义

您可以这样做:

class BaseModel {
    public static create<T extends BaseModel>(obj: any): T {
        let instance = Object.assign(new this(), obj);
        return instance;
    }
}
类基本模型{
公共静态创建(对象:任意):T{
让instance=Object.assign(newthis(),obj);
返回实例;
}
}
()

然后

让myModel=myModel.create(…);

将正常工作。

我的案例可能重复的部分不同。解决方案相同-将另一个参数添加到
create
。像
create(cls:{new():T},obj:any){…assignIn(new cls(),obj);…}
一样定义它,像
MyModel.create(MyModel,…)
一样使用它。我的案例的可能重复是不同的。解决方案是相同的-向
create
添加另一个参数。像
create(cls:{new():T},obj:any){…assignIn(new cls(),obj);…}
一样定义它,像
MyModel.create(MyModel,…)
一样使用它。谢谢你的回答,谢谢你的回答,
let myModel = MyModel.create<MyModel>(...);