我想拥有基本模型:
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(...);
但是,我不能强制它工作并出现错误:
"T"仅指类型,但在此处用作值。
您不能将泛型约束用作值,它在运行时中不存在,因此:
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>(...);
将正常工作。