У меня есть абстрактный класс в машинописном тексте, у которого есть метод для предоставления обратного вызова для последующего использования. Возвращаемый тип метода — это класс, поэтому я могу использовать свободное кодирование. Я пытаюсь расширить класс, но не знаю, как заставить метод возвращать тип производного класса:
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
}
...
}
Я знаю, что мне нужно каким-то образом использовать Generics, чтобы вернуть универсальный тип из onPageChanging и onPageChanged, но пока мне это не удалось.
Может ли кто-нибудь помочь?