export declare type Arguments = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; /** * Type-safe event emitter. * * Use it like this: * * interface MyEvents { * error: (error: Error) => void * message: (from: string, content: string) => void * } * * const myEmitter = new EventEmitter() as TypedEmitter * * myEmitter.on("message", (from, content) => { * // ... * }) * * myEmitter.emit("error", "x") // <- Will catch this type error */ interface TypedEventEmitter { addListener(event: E, listener: Events[E]): this; on(event: E, listener: Events[E]): this; once(event: E, listener: Events[E]): this; prependListener(event: E, listener: Events[E]): this; prependOnceListener(event: E, listener: Events[E]): this; off(event: E, listener: Events[E]): this; removeAllListeners(event?: E): this; removeListener(event: E, listener: Events[E]): this; emit(event: E, ...args: Arguments): boolean; eventNames(): (keyof Events | string | symbol)[]; rawListeners(event: E): Function[]; listeners(event: E): Function[]; listenerCount(event: E): number; getMaxListeners(): number; setMaxListeners(maxListeners: number): this; } export default TypedEventEmitter;