export interface EventMap { [event: string]: any; } /** * @inline */ export type EventListener = (data: D) => void; declare abstract class TypedEventEmitter { protected listeners: { [K in keyof E]?: EventListener[]; }; /** * Add an event listener, returns a function that can be called to remove the listener * @param event * @param listener */ on(event: T, listener: EventListener): () => void; /** * Add an event listener that will be called only once * @param event * @param listener */ once(event: T, listener: EventListener): () => void; /** * Remove an event listener * @param event * @param listener */ off(event: T, listener: EventListener): void; /** * Dispatch an event to all listeners * @param event * @param data */ protected emit(event: T, data: E[T]): void; } export default TypedEventEmitter;