UNPKG

@zodash/event

Version:
32 lines (31 loc) 1.71 kB
export declare type Arguments<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; export declare type Listener = any; export interface IEvent<Events = any> { on<E extends keyof Events>(event: E, listener: Events[E]): this; off<E extends keyof Events>(event: E, listener: Events[E]): this; addListener<E extends keyof Events>(event: E, listener: Events[E]): this; removeListener<E extends keyof Events>(event: E, listener: Events[E]): this; removeAllListeners<E extends keyof Events>(event: E): this; emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): this; once<E extends keyof Events>(event: E, listener: Events[E]): this; listeners: Record<keyof Events, Listener[]>; } declare const LISTENERS: unique symbol; export interface DefaultEvents { error(error: Error): void; } export declare class Event<Events = any> implements IEvent<Events> { private [LISTENERS]; get listeners(): Record<keyof Events, any[]>; on<E extends keyof Events>(event: E, listener: Events[E]): this; on(event: 'error', listener: (error: Error) => void): this; off<E extends keyof Events>(event: E, listener: Events[E]): this; once<E extends keyof Events>(event: E, listener: Events[E]): this; emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): this; emit<E extends keyof Events>(event: 'error', error: Error): this; addListener<E extends keyof Events>(event: E, listener: Events[E]): this; removeListener<E extends keyof Events>(event: E, listener: Events[E]): this; removeAllListeners<E extends keyof Events>(event: E): this; } export declare const EventEmitter: typeof Event; export {};