Node.js 隐式继承
我正在使用一个扩展类原型的库。虽然不重要,但在我的例子中,库将Node.js 隐式继承,node.js,typescript,inheritance,prototypal-inheritance,Node.js,Typescript,Inheritance,Prototypal Inheritance,我正在使用一个扩展类原型的库。虽然不重要,但在我的例子中,库将EventEmitter原型添加到我的类中,然后用EventEmitter的实例实例化该类。我需要注册参加这些活动,但我很难让这个玩得很好。该库是在引入extends关键字的ES6风格继承之前创建的,我无法更改库,因此我必须在类中依赖某种隐式继承 是否可以隐式继承另一个类型 示例代码 我试过的 显式继承-需要调用super,对象已经是一个事件发射器,我只希望类型绑定到我的类 class Foo extends EventEmitt
EventEmitter
原型添加到我的类中,然后用EventEmitter
的实例实例化该类。我需要注册参加这些活动,但我很难让这个
玩得很好。该库是在引入extends
关键字的ES6风格继承之前创建的,我无法更改库,因此我必须在类中依赖某种隐式继承
是否可以隐式继承另一个类型
示例代码
我试过的 显式继承-需要调用
super
,对象已经是一个事件发射器,我只希望类型绑定到我的类
class Foo extends EventEmitter {
constructor() {
this.on('event', ...)
}
}
[ts]派生类的构造函数必须包含“super”调用
在调用这些方法之前强制转换到
EventEmitter
class Foo {
constructor() {
const e = this as EventEmitter;
e.on('event', ...)
}
}
[ts]
无法将类型“this”转换为类型“EventEmitter”。
类型“Foo”与类型“EventEmitter”不可比较。
类型“Foo”中缺少属性“addListener”
对
any
进行强制转换,然后再对EventEmitter
进行强制转换,虽然效果不错,但感觉像是一次黑客攻击。要求到处浇铸也不是很优雅,我觉得有更合适的解决方案
class Foo {
constructor() {
const e = this as any as EventEmitter;
e.on('event', ...)
}
}
您可以使用类/接口声明合并:
declare class EventEmitter{
on(n:string):void
}
interface Foo extends EventEmitter { }
class Foo {
constructor() {
this.on('event')
}
}
declare class EventEmitter{
on(n:string):void
}
interface Foo extends EventEmitter { }
class Foo {
constructor() {
this.on('event')
}
}