Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 隐式继承_Node.js_Typescript_Inheritance_Prototypal Inheritance - Fatal编程技术网

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')
    }
}