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



我想拥有基本模型:

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

将正常工作。

最新更新