我在打字稿中有一个抽象类,该类具有提供回调以供以后使用的方法。该方法的返回类型是类,因此我可以使用流利的样式编码。我正在尝试扩展类,但不确定如何获取返回派生类类型的方法:
export abstract class Wizard {
...
public onPageChanging(handler: PageChangingHandler): Wizard { // Returns Wizard (but I would like this to be the derived class instead)
this.onPageChangingHandler = handler;
return this;
}
public onPageChanged(handler: PageChangedHandler): Wizard { // Returns Wizard (but I would like this to be the derived class instead)
this.onPageChangedHandler = handler;
return this;
}
...
}
export class StepWizard extends Wizard {
...
}
呼叫代码:
export class Foo {
private wizard: StepWizard;
...
wireUpWizard() {
this.wizard = new StepWizard({
elem: HTMLElement,
}).onPageChanging(pc => {
// Handle Page Changing
}).onPageChanged(pc => {
// Handler Page Changed
});
// ISSUE: Can't use fluent chaining, as onPageChanging/onPageChanged returns Wizard instead of StepWizard
}
...
}
我知道我需要以某种方式使用泛型来从onPageChanging和onPageChanged返回泛型类型,但是到目前为止我还不能做到这一点。
有人可以帮忙吗?
答案 0 :(得分:5)
您可能正在寻找polymorphic this type。
export abstract class Wizard {
...
public onPageChanging(handler: PageChangingHandler): this { // <-- here
this.onPageChangingHandler = handler;
return this;
}
public onPageChanged(handler: PageChangedHandler): this { // <-- here
this.onPageChangedHandler = handler;
return this;
}
...
}