declare type EventMap = { [eventName: string]: Array; }; declare type InternalEventNames = 'newListener' | 'removeListener'; declare type InternalListener = Listener<[ eventName: keyof Events, listener: Listener> ]>; declare type Listener> = (...data: Data) => void; /** * Node.js-compatible implementation of `EventEmitter`. * * @example * const emitter = new Emitter<{ hello: [string] }>() * emitter.on('hello', (name) => console.log(name)) * emitter.emit('hello', 'John') */ declare class Emitter { private events; private maxListeners; private hasWarnedAboutPotentialMemoryLeak; static defaultMaxListeners: number; static listenerCount(emitter: Emitter, eventName: keyof Events): number; constructor(); private _emitInternalEvent; private _getListeners; private _removeListener; private _wrapOnceListener; setMaxListeners(maxListeners: number): this; /** * Returns the current max listener value for the `Emitter` which is * either set by `emitter.setMaxListeners(n)` or defaults to * `Emitter.defaultMaxListeners`. */ getMaxListeners(): number; /** * Returns an array listing the events for which the emitter has registered listeners. * The values in the array will be strings or Symbols. */ eventNames(): Array; /** * Synchronously calls each of the listeners registered for the event named `eventName`, * in the order they were registered, passing the supplied arguments to each. * Returns `true` if the event has listeners, `false` otherwise. * * @example * const emitter = new Emitter<{ hello: [string] }>() * emitter.emit('hello', 'John') */ emit(eventName: EventName, ...data: Events[EventName]): boolean; addListener(eventName: InternalEventNames, listener: InternalListener): this; addListener(eventName: EventName, listener: Listener): this; on(eventName: InternalEventNames, listener: InternalListener): this; on(eventName: EventName, listener: Listener): this; once(eventName: InternalEventNames, listener: InternalListener): this; once(eventName: EventName, listener: Listener): this; prependListener(eventName: InternalEventNames, listener: InternalListener): this; prependListener(eventName: EventName, listener: Listener): this; prependOnceListener(eventName: InternalEventNames, listener: InternalListener): this; prependOnceListener(eventName: EventName, listener: Listener): this; removeListener(eventName: InternalEventNames, listener: InternalListener): this; removeListener(eventName: EventName, listener: Listener): this; off(eventName: InternalEventNames, listener: InternalListener): this; off(eventName: EventName, listener: Listener): this; removeAllListeners(eventName?: InternalEventNames): this; removeAllListeners(eventName?: EventName): this; listeners(eventName: InternalEventNames): Array>; listeners(eventName: EventName): Array>; listenerCount(eventName: InternalEventNames): number; listenerCount(eventName: EventName): number; rawListeners(eventName: EventName): Array>; } declare class MemoryLeakError extends Error { readonly emitter: Emitter; readonly type: string | number | symbol; readonly count: number; constructor(emitter: Emitter, type: string | number | symbol, count: number); } export { Emitter, EventMap, InternalEventNames, InternalListener, Listener, MemoryLeakError };