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
?