【问题标题】:How would I rewrite this statement in TypeScript ES6 style 'EventEmitter = require('events').EventEmitter'?我将如何以 TypeScript ES6 样式的“EventEmitter = require('events').EventEmitter”重写此语句?
【发布时间】:2015-09-17 09:48:53
【问题描述】:

如标题所述,我想用 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

【问题讨论】:

标签: node.js typescript ecmascript-6


【解决方案1】:

没关系,它有效!这只是 Rx 定义文件的问题。

我更改了以下内容。

import * as Rx from "rx"

到

const Rx = require('rx')

并保持 ES6 的导入风格来导入 EventEmitter。

【讨论】:

  • 通过使用const Rx = require('rx'),您关闭了Rx 变量的类型检查。不要这样做。
  • 是的,我知道,但我似乎别无选择。
【解决方案2】:

“EventEmitter”类型的参数不可赋值

阅读文档:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/fromevent.md 您的示例肯定可以工作。

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

【讨论】:

  • 使用 Rx 事件发射器到底是什么意思?我需要做什么才能让它工作?
  • 对不起。我错了。阅读文档并进一步调查后修复了答案
【解决方案3】:

我不喜欢解决方案,但我所做的是使用“any”关闭类型。

var eventEmitter: any = new EventEmitter();

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 2016-11-11
    • 2017-07-07
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多