带有 TypeScript 的 NodeJS EventEmitter class

NodeJS EventEmitter with TypeScript class

是否可以将 NodeJS events.EventEmitter 与 TypeScript class 一起使用?如果是,如何?

在过去的几个小时里,我尝试了无数种变体来让它工作,所以我不会列出其中的任何一种。

我基本上想做的事情:

export class Database{
    constructor(cfg:IDatabaseConfiguration) {
        // events.EventEmitter.call(this); 
        mongoose.connect(cfg.getConnectionString(), cfg.getCredentials(), function (err:any) {
            if (err)
                this.emit('error', err);
            else
                this.emit('ready');
        });
    }
}

您应该下载节点类型:

$ tsd install node --save

然后只需使用以下代码:

///<reference path="./typings/node/node.d.ts" />
import events = require('events');

class Database{
    constructor() {
        events.EventEmitter.call(this);
    }
}

我简化了它来测试你的主要问题。

编辑: 根据您的评论修改:

///<reference path="./typings/node/node.d.ts" />
import events = require('events');

class Database extends events.EventEmitter {
    constructor() {
        super();
        this.emit('ready');
    }
}

new Database();

新方法:

///<reference path="./typings/node/node.d.ts" />

import {EventEmitter} from 'events';

class Database extends EventEmitter {
    constructor() {
        super();
        this.emit('ready');
    }
}

new Database();

下载 NodeJS 和 EventEmitter 类型定义的现代方法是 yarn add @types/nodenpm install @types/node