@fewings/core
Version:
Useful pure functions for frontend development
13 lines (11 loc) • 654 B
text/typescript
type EventMap = Record<string, (...args: any[]) => void>;
type TListener<M extends EventMap, K extends keyof M> = M[K];
type TPayLoad<M extends EventMap, K extends keyof M> = Parameters<TListener<M, K>>;
declare abstract class Emitter<T extends EventMap> {
listener: Partial<Record<keyof T, TListener<T, keyof T>[]>>;
on<E extends keyof T>(event: E, listener: TListener<T, E>): () => void;
once<E extends keyof T>(event: E, listener: TListener<T, E>): () => void;
dispatch<E extends keyof T>(event: E, ...payload: TPayLoad<T, E>): void;
removeAllListeners(): void;
}
export { Emitter, type EventMap, type TListener, type TPayLoad };