/** * From typed-emitter * https://npm.im/typed-emitter */ /** @hidden */ export type Arguments = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; /** * Type-safe event emitter. * @hidden */ export default interface TypedEventEmitter { /** @hidden */ addListener(event: E, listener: Events[E]): this; /** @hidden */ on(event: E, listener: Events[E]): this; /** @hidden */ once(event: E, listener: Events[E]): this; /** @hidden */ prependListener(event: E, listener: Events[E]): this; /** @hidden */ prependOnceListener(event: E, listener: Events[E]): this; /** @hidden */ off(event: E, listener: Events[E]): this; /** @hidden */ removeAllListeners(event?: E): this; /** @hidden */ removeListener(event: E, listener: Events[E]): this; /** @hidden */ emit(event: E, ...args: Arguments): boolean; /** @hidden */ eventNames(): (keyof Events | string | symbol)[]; /** @hidden */ rawListeners(event: E): Function[]; /** @hidden */ listeners(event: E): Function[]; /** @hidden */ listenerCount(event: E): number; /** @hidden */ getMaxListeners(): number; /** @hidden */ setMaxListeners(maxListeners: number): this; }