UNPKG

typed-emitter

Version:

Strictly typed event emitter interface for TypeScript 3.

44 lines (38 loc) 1.58 kB
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<MyEvents>; * * myEmitter.emit("error", "x") // <- Will catch this type error; * ``` */ interface TypedEventEmitter<Events extends EventMap> { addListener<E extends keyof Events> (event: E, listener: Events[E]): this on<E extends keyof Events> (event: E, listener: Events[E]): this once<E extends keyof Events> (event: E, listener: Events[E]): this prependListener<E extends keyof Events> (event: E, listener: Events[E]): this prependOnceListener<E extends keyof Events> (event: E, listener: Events[E]): this off<E extends keyof Events>(event: E, listener: Events[E]): this removeAllListeners<E extends keyof Events> (event?: E): this removeListener<E extends keyof Events> (event: E, listener: Events[E]): this emit<E extends keyof Events> (event: E, ...args: Parameters<Events[E]>): boolean // The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5 eventNames (): (keyof Events | string | symbol)[] rawListeners<E extends keyof Events> (event: E): Events[E][] listeners<E extends keyof Events> (event: E): Events[E][] listenerCount<E extends keyof Events> (event: E): number getMaxListeners (): number setMaxListeners (maxListeners: number): this } export default TypedEventEmitter