Typescript 类型脚本序列化泛型

Typescript 类型脚本序列化泛型,typescript,generics,serialization,Typescript,Generics,Serialization,我有以下基类: export default class BaseModel{ Id:string; CreatedDate:Date; } 与以下儿童班: export default class ProfileModel extends BaseModel{ UserName:string; Email:string; Password:string; FirstName:string; LastName:string; Ve

我有以下基类:

export default class BaseModel{
    Id:string;
    CreatedDate:Date;
}
与以下儿童班:

export default class ProfileModel extends BaseModel{
    UserName:string;
    Email:string;
    Password:string;
    FirstName:string;
    LastName:string;
    Vendor:Boolean;
    Authenticated:Boolean;
    constructor(aUserName, anEmail, aPassword, aFirstName, aLastName, 
aVendor, isAuthenticated){
    super();
    this.UserName = aUserName;
    this.Email = anEmail;
    this.Password = aPassword;
    this.FirstName = aFirstName;
    this.LastName = aLastName;
    this.Vendor = aVendor;
    this.Authenticated = isAuthenticated;
    }
    public static NewNonVendor(aUserName, anEmail, aPassword, aFirstName, 
aLastName):ProfileModel{
        return new ProfileModel(aUserName, anEmail, aPassword, aFirstName, 
    aLastName, null, false);
    }
}
我想将fromJSON方法移动到基类,以处理所有子类的序列化。我想基本上执行以下操作,但在想出正确的语法时遇到困难:

export default class BaseModel<T>{
    Id:string;
    CreatedDate:Date;
    static fromJSON(d: Object): T {
        return Object.assign(new T(), d);
    }
}
导出默认类BaseModel{
Id:字符串;
CreatedDate:日期;
静态fromJSON(d:Object):T{
返回Object.assign(新的T(),d);
}
}

如果将T generic键入为
T extends BaseModel
,则可以将静态方法的
this
键入为
this:new()=>T

class BaseModel {
  Id: string;
  CreatedDate: Date;
  static fromJSON<T extends BaseModel>(this: new () => T, d: Object): T {
    return Object.assign(new this(), d);
  }
  constructor(Id: string, CreatedDate: Date) {
    this.Id = Id;
    this.CreatedDate = CreatedDate;
  }
}
类基本模型{
Id:字符串;
CreatedDate:日期;
静态fromJSON(this:new()=>T,d:Object):T{
返回Object.assign(新this(),d);
}
构造函数(Id:string,CreatedDate:Date){
这个.Id=Id;
this.CreatedDate=CreatedDate;
}
}

@CeertainPerformance是这似乎有效。添加构造函数是有原因的吗?只有这样类型脚本才能在上正确编译而不会出错(当然,使用原始构造函数实现-这不是问题,所以它抛出了一个TS错误),所以现在在尝试使用以下方法调用fromJSON时:let test=ProfileModel.fromJSON(json作为对象);我得到以下错误:“typeof ProfileModel”类型的“this”上下文不可分配给“new()=>ProfileModel”类型的方法“this”。这里看起来编译时没有错误:还要注意,JSON是一种用字符串表示对象的方法。如果您拥有的是一个对象,那么它不是一个JSON-可以将其称为
fromPlainObject
,而不是
fromJSON
?或者传入JSON并在方法内部对其使用
JSON.parse