declare interface EventMap { [event: string | symbol]: unknown[] } declare interface EventHandler< in A extends unknown[] = unknown[], out R = unknown > { (...args: A): R } declare class EventEmitterError extends Error { static OPERATION_ABORTED(cause: Error, msg?: string): EventEmitterError static UNHANDLED_ERROR(cause: Error, msg?: string): EventEmitterError } declare interface EventEmitter { addListener(name: E, fn: EventHandler): this addOnceListener( name: E, fn: EventHandler ): this prependListener( name: E, fn: EventHandler ): this prependOnceListener( name: E, fn: EventHandler ): this removeListener(name: E, fn: EventHandler): this removeAllListeners(name?: E): this on(name: E, fn: EventHandler): this once(name: E, fn: EventHandler): this off(name: E, fn: EventHandler): this emit(name: E, ...args: M[E]): boolean listeners(name: E): EventHandler listenerCount(name: E): number getMaxListeners(): number setMaxListeners(n: number): void } declare class EventEmitter {} declare namespace EventEmitter { export function on( emitter: EventEmitter, name: E, opts?: { signal?: AbortSignal } ): AsyncIterableIterator export function once( emitter: EventEmitter, name: E, opts?: { signal?: AbortSignal } ): Promise export function forward< F extends EventMap, E extends keyof F, T extends Pick >( from: EventEmitter, to: EventEmitter, names: E | E[], opts?: { emit?: (name: E, ...args: T[E]) => void } ): void export function listenerCount( emitter: EventEmitter, name: E ): number export let defaultMaxListeners: number export { EventEmitter, EventEmitterError as errors, EventMap, EventHandler } } export = EventEmitter