打字稿 1.6 抽象方法

Typescript 1.6 abstract methods

我想这样做:

export abstract class Base{
    constructor(){
       this.activate();
    }

    protected abstract activate():void;
}

class MyClass extends Base{
    static $inject = ['myService'];
    constructor(service: myService){
        super();
        this.myService = myService;
    }
    activate():void{
        this.myService.doSomething();
    }
}

但我不能,因为派生的 class 方法中 'this' 的类型是 'Base'。 我怎样才能让我的代码工作?

请帮忙。 谢谢

问题是,调用 activate() 的那一刻,this.myService 尚未设置。

这是调用堆栈:

MyClass::constructor() -> super() -> Base::constructor() -> MyClass::activate()

因此在 MyClass 的构造函数中,您需要在调用基本构造函数之前分配 this.myService

class MyClass extends Base{
    static $inject = ['myService'];
    constructor(service: myService){
        this.myService = myService; // <-- before super();
        super();
    }
    activate():void{
        this.myService.doSomething();
    }
}