@zodash/event
Version:
event emitter
32 lines (31 loc) • 1.71 kB
TypeScript
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 {};