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

时间:2017-05-10 21:22:13

标签: typescript

我想要基础模型:

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;仅指类型,但在此处用作值。

1 个答案:

答案 0 :(得分:4)

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

new T()

毫无意义。

你可以这样做:

class BaseModel {
    public static create<T extends BaseModel>(obj: any): T {
        let instance = Object.assign(new this(), obj);
        return instance;
    }
}

code in playground

然后

let myModel = MyModel.create<MyModel>(...);

将正常运作。