我想创建一个包含所有子代都将使用的方法的基类。但是,我在继承返回类对象的方法时遇到了麻烦。
这是我想要实现的目标:
export class BaseModel {
constructor(){}
fromJson(model: BaseModel): BaseModel {
if (!model) {
return new BaseModel();
}
Object.keys(model)
.map(key => this[key] = model[key]);
return this;
}
}
export class ChildModel extends BaseModel {
}
...
const child: ChildModel = new ChildModel().fromJson(someJson);
...
但是我得到编译错误:
类型'BaseModel'不能分配给类型'ChildModel'。
我能够做到这一点的唯一方法是通过在MyChild类中定义'fromJson'方法,如下所示:
fromJson(child: ChildModel): ChildModel {
super.fromJson(child);
return this;
}
但这不是我想要的。如果我要进行继承,那是因为我希望使用通用方法删除每个子代中的代码。
我找到了this post,但是在理解和实现它时遇到了一些困难
答案 0 :(得分:2)
您可以使用this
类型,该类型始终引用实例本身的类型。但是,这需要您将new BaseModel()
强制转换为this
:
export class BaseModel {
constructor(){}
fromJson(model: BaseModel): this {
if (!model) {
return new BaseModel() as this;
}
Object.keys(model)
.map(key => this[key] = model[key]);
return this;
}
}