如何在TypeScript ES6样式中重写此语句' EventEmitter = require(' events')。EventEmitter'?

时间:2015-09-17 09:48:54

标签: node.js typescript ecmascript-6

与标题状态一样,我想在TypeScript

中重写下面的语句
EventEmitter = require('events').EventEmitter

到ES6风格

import {EventEmitter} from "events"

我不确定这两个是否相同,实际上我认为他们不是因为当我试图将RxJS与其上面的第二个语句一起使用时没有编译下面的例子,而它与第一个例子一样。

当我使用上面的第二条语句时,我收到以下错误。

.build/lib/process.ts(12,3): error TS2345: Argument of type 'EventEmitter' is not assignable to parameter of type '{ on: (name: string, cb: (e: any) => any) => void; off: (name: string, cb: (e: any) => any) => vo...'.
    Property 'off' is missing in type 'EventEmitter'.

示例:

var EventEmitter = require('events').EventEmitter,
    Rx = require('rx');

var eventEmitter = new EventEmitter();

var source = Rx.Observable.fromEvent(
  eventEmitter,
  'data',
  function (foo, bar) { return { foo: bar, bar: bar }; });

var subscription = source.subscribe(
  function (x) {
    console.log('Next: foo -' + x.foo + ', bar -' + x.bar);
  },
  function (err) {
    console.log('Error: ' + err);
  },
  function () {
    console.log('Completed');
  });

eventEmitter.emit('data', 'baz', 'quux');
// => Next: foo - baz, bar - quux

3 个答案:

答案 0 :(得分:0)

别介意它有效!它只是Rx定义文件的一个问题。

我更改了以下内容。

import * as Rx from "rx"

const Rx = require('rx')

并保留ES6导入样式以导入EventEmitter。

答案 1 :(得分:0)

  

“EventEmitter”类型的参数不可分配

阅读文档:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/fromevent.md您的示例绝对应该

这是RX定义中的错误。类型定义应明确支持EventEmitter或使其与EventEmitter实例兼容。

答案 2 :(得分:0)

我不喜欢解决方案,但我做的工作是使用'any'关闭类型。

var eventEmitter: any = new EventEmitter();