具有TypeScript类的NodeJS EventEmitter

boo*_*oop 13 javascript node.js typescript typescript1.6

是否可以将NodeJS events.EventEmitter与TypeScript类一起使用?如果有,怎么样?

我在最后几个小时尝试了无数的变化来使这个工作,所以我不会列出任何一个.

我基本上想做什么:

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');
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

Dom*_*alo 22

新的方法:

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

import {EventEmitter} from 'events';

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

new Database();
Run Code Online (Sandbox Code Playgroud)


Mar*_*cka 19

你应该下载节点类型:

$ tsd install node --save
Run Code Online (Sandbox Code Playgroud)

然后只需使用以下代码:

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

class Database{
    constructor() {
        events.EventEmitter.call(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

new Database();
Run Code Online (Sandbox Code Playgroud)


Yur*_*hov 5

下载 NodeJS 和 EventEmitter 类型定义的现代方法是:

npm install @types/node
Run Code Online (Sandbox Code Playgroud)

或用纱线:

yarn add @types/node
Run Code Online (Sandbox Code Playgroud)