打字稿 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();
}
}
我想这样做:
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();
}
}