与标题状态一样,我想在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
答案 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();