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>(...);