pg-listen
Version:
PostgreSQL LISTEN & NOTIFY that finally works.
36 lines (35 loc) • 1.4 kB
TypeScript
declare 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;
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)[];
listeners<E extends keyof Events>(event: E): Function[];
listenerCount<E extends keyof Events>(event: E): number;
getMaxListeners(): number;
setMaxListeners(maxListeners: number): this;
}
export {};