/** * The MIT License (MIT) * Copyright (c) 2018 Andy Wermke * https://github.com/andywer/typed-emitter/blob/9a139b6fa0ec6b0db6141b5b756b784e4f7ef4e4/LICENSE */ export type EventMap = { [key: string]: (...args: any[]) => void; }; /** * Type-safe event emitter. * * Use it like this: * * ```typescript * type MyEvents = { * error: (error: Error) => void; * message: (from: string, content: string) => void; * } * * const myEmitter = new EventEmitter() as TypedEmitter; * * myEmitter.emit("error", "x") // <- Will catch this type error; * ``` */ export 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: Parameters): boolean; eventNames(): (keyof Events | string | symbol)[]; rawListeners(event: E): Events[E][]; listeners(event: E): Events[E][]; listenerCount(event: E): number; getMaxListeners(): number; setMaxListeners(maxListeners: number): this; }