【发布时间】:2018-11-13 07:51:49
【问题描述】:
我正在打字稿中创建一个 EventEmitter,但我无法找到执行以下操作的方法:
假设我有一个这样的界面:
interface EventEmitterSubscription { dispose(): void }
// here it is
interface EventEmitter<T extends { [key: string]: any }> {
onAnyEvent(callback: (event: { type: ???, payload: ??? }) => void): EventEmitterSubscription
// ...
}
我找不到输入 onAnyEvent 回调的方法,例如,对于这样的 eventEmitter:
EventEmitter<{ onNumberReceived: number, onCatReceived: { cat: ICat }, onPersonNameReceived: string }>
onAnyEvent 字段的类型为
onAnyEvent(callback: (event: { type: 'onNumberReceived', payload: number } | { type: 'onCatReceived', payload: { cat: ICat } } | { type: 'onPersonNameReceived', payload: string }) => void): EventEmitterSubscription
目前我的实现界面如下:
onAnyEvent(callback: (event: { type: keyof T, payload: T[keyof T] }) => void): EventEmitterSubscription
除了目前不工作,例如会产生类型onAnyEvent(callback: (event: { type: 'onNumberReceived', payload: number } | {
type: 'onNumberReceived', payload: { cat: ICat } } | /* ... */) => void): EventEmitterSubscription
那么我该如何输入onAnyEvent 字段呢?
【问题讨论】:
标签: javascript typescript types