我想要基础模型:
export class BaseModel<T> {
public static create(obj:any):T {
let instance = _.assignIn(new T(), obj);
return instance;
}
}
然后,具体型号:
export class MyModel: BaseModel<MyModel> {
public prop1:string;
}
然后,我想以下列方式创建模型:
let myModel = MyModel.create(...);
但是,我不能强迫它运作并得到错误:
&#39; T&#39;仅指类型,但在此处用作值。
答案 0 :(得分:4)
您不能将通用约束用作值,它在运行时不存在,因此:
new T()
毫无意义。
你可以这样做:
class BaseModel {
public static create<T extends BaseModel>(obj: any): T {
let instance = Object.assign(new this(), obj);
return instance;
}
}
然后
let myModel = MyModel.create<MyModel>(...);
将正常运作。