UNPKG

js-uploader

Version:
41 lines (36 loc) 1.5 kB
export type Arguments<T> = [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<MyEvents> * * myEmitter.on("message", (from, content) => { * // ... * }) * * myEmitter.emit("error", "x") // <- Will catch this type error */ export interface TypedEventEmitter<Events> { 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: Arguments<Events[E]>): boolean eventNames(): (keyof Events | string | symbol)[] rawListeners<E extends keyof Events>(event: E): Function[] listeners<E extends keyof Events>(event: E): Function[] listenerCount<E extends keyof Events>(event: E): number getMaxListeners(): number setMaxListeners(maxListeners: number): this }