@wiko/subscribable
Version:
Helpers for creating subscription-based event emitters
19 lines • 1.27 kB
TypeScript
type EventMap = Record<string, Event>;
type Listener<TEvent extends Event> = ((evt: TEvent) => void) | {
handleEvent(object: TEvent): void;
};
export interface TypedEventEmitter<TEventMap extends EventMap> {
addEventListener<const TEventType extends keyof TEventMap>(type: TEventType, listener: Listener<TEventMap[TEventType]>, options?: AddEventListenerOptions | boolean): void;
removeEventListener<const TEventType extends keyof TEventMap>(type: TEventType, listener: Listener<TEventMap[TEventType]>, options?: EventListenerOptions | boolean): void;
}
/**
* Why not just extend the interface above, rather than to copy/paste it?
* See https://github.com/microsoft/TypeScript/issues/60008
*/
export interface TypedEventTarget<TEventMap extends EventMap> {
addEventListener<const TEventType extends keyof TEventMap>(type: TEventType, listener: Listener<TEventMap[TEventType]>, options?: AddEventListenerOptions | boolean): void;
dispatchEvent<TEventType extends keyof TEventMap>(ev: TEventMap[TEventType]): void;
removeEventListener<const TEventType extends keyof TEventMap>(type: TEventType, listener: Listener<TEventMap[TEventType]>, options?: EventListenerOptions | boolean): void;
}
export {};
//# sourceMappingURL=event-emitter.d.ts.map