export declare type Arguments = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; export declare type Listener = any; export interface IEvent { on(event: E, listener: Events[E]): this; off(event: E, listener: Events[E]): this; addListener(event: E, listener: Events[E]): this; removeListener(event: E, listener: Events[E]): this; removeAllListeners(event: E): this; emit(event: E, ...args: Arguments): this; once(event: E, listener: Events[E]): this; listeners: Record; } declare const LISTENERS: unique symbol; export interface DefaultEvents { error(error: Error): void; } export declare class Event implements IEvent { private [LISTENERS]; get listeners(): Record; on(event: E, listener: Events[E]): this; on(event: 'error', listener: (error: Error) => void): this; off(event: E, listener: Events[E]): this; once(event: E, listener: Events[E]): this; emit(event: E, ...args: Arguments): this; emit(event: 'error', error: Error): this; addListener(event: E, listener: Events[E]): this; removeListener(event: E, listener: Events[E]): this; removeAllListeners(event: E): this; } export declare const EventEmitter: typeof Event; export {};