2015-11-15 14 views
11

Bir TypeScript sınıfıyla NodeJS 'events.EventEmitter kullanmak mümkün mü? Evet ise nasıl?TypeScript sınıfıyla NodeJS EventEmitter

Bu çalışma için son saatlerde sayısız varyasyon denedim, bu yüzden bunlardan hiçbirini listelemem.

$ tsd install node --save 

ve sonra sadece şu kodu kullanın:

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

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

ben bunu basitleştirilmiş

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

cevap

14

Sen düğüm typings indirmek olmalıdır: Ben temelde ne yapmak istiyorum

ana probleminizi test edin.

Düzenleme: Yorumlarınız dayalı Modifiye:

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

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

new Database(); 
+0

Ama sanırım ben ('.sistem kullanabilmesi için, sınıfını genişletmek gerekir)' benim örneğimde, değil mi? 'hata TS2339: 'Veritabanı' türünde 'özellik yok' özelliği yok. – Brettetete

+0

Değiştirilen kodu deneyebilir misiniz? –

+0

Bu, sürümünüzde çalışır, ancak geri aramamda değil. OOP JS ile çok rahat değilim. Bu yüzden şunu ekledim: var bu = ve 'that.emit'i kullandım geri çağırmada işe yaradı - sanırım bu iyi – Brettetete

13

Yeni yaklaşım:

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

import {EventEmitter} from 'events'; 

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

new Database();