免责声明:我觉得很难总结问题的标题,所以如果你有更好的建议,请让我知道在评论中。
让我们使用以下简化的typescript类:

class Model {
  save():Model {
    // save the current instance and return it
  }
}

Model类有一个返回自身实例的save()方法:aModel
我们可以像这样扩展Model
class SomeModel extends Model {
  // inherits the save() method
}

因此,SomeModel将继承save(),但它仍然返回一个Model,而不是一个SomeModel
有没有一种方法,也许是使用泛型,将save()SomeModel的返回类型设置为SomeModel,而不必在继承类中重新定义它?

最佳答案

你运气真好。Polymorphic this刚从TypeScript 1.7里出来。升级到typescript 1.7,然后删除显式返回类型,它将正常工作:

class Model {
    save() {
        return this;
    }
}

class SomeModel extends Model {
    otherMethod() {
    }
}

let someModel = new SomeModel().save();
// no compile error since someModel is typed as SomeModel in TS 1.7+
someModel.otherMethod();

09-09 20:43