typescript:抽象方法中的装饰器

xav*_*ier 3 typescript

我有以下课程:

export abstract class CanDeactivateComponent {
  abstract canLeavePage(): boolean;
  abstract onPageLeave(): void;

  @someDecorator
  abstract canDeactivateBeforeUnload(): boolean;

}
Run Code Online (Sandbox Code Playgroud)

我得到了错误A decorator can only decorate a method implementation, not an overload。我知道在这种情况下我不能放置装饰器,但是可以应用哪种解决方法以便我强制@someDecorator之前使用此类的所有实现canDeactivateBeforeUnload?有没有办法将这个装饰器放在抽象类本身中,这样我就不必在所有实现中编写它?

谢谢你!

Ren*_*ers 5

我想这取决于上下文,但也许使用代理可以为您工作的方法?

export abstract class CanDeactivateComponent {
    abstract canLeavePage(): boolean;
    abstract onPageLeave(): void;

    abstract canDeactivateBeforeUnload(): boolean;

    @someDecorator
    _canDeactivateBeforeUnload(): boolean {
        return this.canDeactivateBeforeUnload()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我会把它翻转过来,将 `_canDeactivateBeforeUnload` 变成公共方法 `canDeactivateBeforeUnload` ,并将 `abstract canDeactivateBeforeUnload` 更改为 `protected abstract _canDeactivateBeforeUnload` ,这就是孩子们要实现的。这样外部调用的每个人都被迫调用装饰方法 (4认同)