web-dev-qa-db-fra.com

NodeJS EventEmitter avec la classe TypeScript

Est-il possible d'utiliser NodeJS 'events.EventEmitter avec une classe TypeScript? Si oui, comment?

J'ai essayé d'innombrables variantes au cours des dernières heures pour que cela fonctionne, donc je n'en énumérerai aucune.

Ce que je veux essentiellement faire:

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');
        });
    }
}
16
boop

Vous devez télécharger les typages de nœuds:

$ tsd install node --save

puis utilisez simplement le code suivant:

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

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

Je l'ai simplifié pour tester votre problème principal.

Edit: Modifié en fonction de votre commentaire:

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

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

new Database();
20
Martin Vseticka

Nouvelle approche:

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

import {EventEmitter} from 'events';

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

new Database();
24
Dominik Palo