我正在使用一个扩展类原型的库。虽然不重要,但在我的例子中,库添加了
EventEmitter
原型到我的类,然后它用
事件发射器
是的。我需要登记参加活动,但我很难
this
玩得好。该库是在ES6样式继承之前通过
extends
关键字已引入,我无法更改库,因此必须依赖类中的某种隐式继承。
是否可以隐式继承其他类型?
示例代码
import { EventEmitter } from 'events';
import { inherits } from 'util';
class Foo {
constructor() {
// Do something assuming
// 'this' is an event emitter
}
}
inherits(Foo, EventEmitter);
Foo.call(new EventEmitter());
我试过的
显式继承-期望调用
super
,对象已经是事件发射器,我只希望类型绑定到我的类。
class Foo extends EventEmitter {
constructor() {
this.on('event', ...)
}
}
派生类的构造函数必须包含“super”调用。
铸造到
事件发射器
在调用这些方法之前。
class Foo {
constructor() {
const e = this as EventEmitter;
e.on('event', ...)
}
}
[时间]
类型“this”无法转换为类型“eventemitter”。
类型“foo”与类型“eventemitter”不可比。
类型“foo”中缺少属性“addListener”。
铸造到
any
然后到
事件发射器
行,但感觉像是个黑客。到处需要一个演员也不是很优雅,我觉得有一个比较合适的解决方案。
class Foo {
constructor() {
const e = this as any as EventEmitter;
e.on('event', ...)
}
}