export interface EventDefinitions { [key: string]: EventListener; } export declare type EventKeys = (keyof T) & ({ [key in keyof T]: string extends key ? never : number extends key ? never : key; } extends { [_ in keyof T]: infer U; } ? U : never); export declare type EventListener = (...args: any[]) => void; export interface IEventSource { on>(event: T, listener: TEvents[T]): void; off>(event: T, listener: TEvents[T]): void; } export declare class EventEmitter implements IEventSource { listeners: Map; on(event: T, listener: TEvents[T]): void; off(event: T, listener: TEvents[T]): void; emit(event: T, ...args: Parameters): void; }