tsee
Version:
Typed EventEmitter implemented with typed args
25 lines (24 loc) • 1.84 kB
TypeScript
/// <reference types="node" />
export declare type Listener = (...args: any[]) => Promise<any> | void;
export declare type DefaultEventMap = {
[event in string | symbol]: Listener;
};
export interface IEventEmitter<EventMap extends DefaultEventMap = DefaultEventMap> {
emit<EventKey extends keyof EventMap>(event: EventKey, ...args: Parameters<EventMap[EventKey]>): boolean;
on<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
once<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
addListener<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
removeListener<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
prependListener<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
prependOnceListener<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
off<EventKey extends keyof EventMap = string>(event: EventKey, listener: EventMap[EventKey]): this;
removeAllListeners<EventKey extends keyof EventMap = string>(event?: EventKey): this;
setMaxListeners(n: number): this;
getMaxListeners(): number;
listeners<EventKey extends keyof EventMap = string>(event: EventKey): EventMap[EventKey][];
rawListeners<EventKey extends keyof EventMap = string>(event: EventKey): EventMap[EventKey][];
eventNames(): Array<string | symbol>;
listenerCount<EventKey extends keyof EventMap = string>(type: EventKey): number;
}
/** cast type of any event emitter to typed event emitter */
export declare function asTypedEventEmitter<EventMap extends DefaultEventMap, X extends NodeJS.EventEmitter>(x: X): IEventEmitter<EventMap>;