【发布时间】:2018-08-30 21:05:34
【问题描述】:
例如,假设我有一个类只发出三个可能的事件 - 'pending' 或 'success' 或 'failure'。此外,eventHandler 中接收的参数类型取决于发出的事件 -
- 如果
'pending',eventHandler不接收任何参数 - 如果
'success',eventHandler收到number - 如果
'failure',eventHandler收到Error
这是我尝试建模的方法:
// @flow
import EventEmitter from 'events'
type CustomEventObj = {|
pending: void,
success: number,
error: Error
|}
declare class MyEventEmitter extends EventEmitter {
on<K: $Keys<CustomEventObj>>(
eventName: K,
eventHandler: (
e: $ElementType<CustomEventObj, K>,
...args: Array<any>
) => void
): this
}
但是,这会导致如下错误:
Error ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ test.js:12:3
Cannot extend EventEmitter [1] with MyEventEmitter because an indexer property is missing in CustomEventObj [2] in the
first argument of property on.
[1] 3│ import EventEmitter from 'events'
:
8│ error: Error
9│ |}
10│
11│ declare class MyEventEmitter extends EventEmitter {
[2] 12│ on<K: $Keys<CustomEventObj>>(
13│ eventName: K,
14│ eventHandler: (
15│ e: $ElementType<CustomEventObj, K>,
16│ ...args: Array<any>
17│ ) => void
18│ ): this
19│ }
20│
我不想在CustomEventObj 上拥有索引器属性,因为这不会扼杀只有 3 个可能事件的意义吗?
任何帮助将不胜感激。
【问题讨论】:
标签: javascript flowtype eventemitter flow-typed