【问题标题】:Extend EventEmitter and call emit扩展 EventEmitter 并调用 emit
【发布时间】:2021-06-17 22:13:52
【问题描述】:

我在 TypeScript 中试过这个:

import events from 'events'
import EventEmitter from 'events'

class MyEmitter extends EventEmitter {
  condition: boolean
  emit() {
    if (this.condition) {
      return events.EventEmitter.prototype.emit.apply(this, arguments)
    }
  }
}

const myEmitter = new MyEmitter()
myEmitter.emit('something')

这会导致最后一行出现Expected 0 arguments, but got 1.ts(2554)(调用emit('something')时。

我该如何处理?

【问题讨论】:

    标签: typescript eventemitter


    【解决方案1】:

    错误是因为您将一个参数传递给emit,它声明了零个参数。

    还有一个问题。 EventEmitteremit的签名是:

    emit(event: string | symbol, ...args: any[]): boolean
    

    如果要重写派生类中的方法,被重写方法的签名必须与基类方法的签名兼容。

    【讨论】:

      【解决方案2】:

      我是这样解决的:

      class MyEmitter extends EventEmitter {
        condition: boolean
        emit(event: string, ...args: any[] {
          if (this.condition) {
            return events.EventEmitter.prototype.emit(event, ...args)
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-31
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 2017-01-01
        • 2022-01-25
        • 1970-01-01
        相关资源
        最近更新 更多