Typescript-具有返回类型的方法继承

时间:2019-09-03 07:06:50

标签: typescript oop inheritance

我想创建一个包含所有子代都将使用的方法的基类。但是,我在继承返回类对象的方法时遇到了麻烦。

这是我想要实现的目标:

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,但是在理解和实现它时遇到了一些困难

1 个答案:

答案 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;
    }
}