@toolpad/utils
Version:
Shared utilities used by Toolpad packages.
27 lines • 967 B
TypeScript
export type EventName = string | symbol;
export type EventHandlers = Record<EventName, unknown>;
export type EventHandler<T extends EventHandlers, K extends keyof T = keyof T> = (event: T[K]) => void;
export type AllEventsHandler<T extends EventHandlers, K extends keyof T = keyof T> = (type: K, event: T[K]) => void;
/**
* Lightweight event emitter
*/
export declare class Emitter<T extends EventHandlers = {}> {
private handlers;
/**
* Add a listener for an event
*/
on(name: '*', handler: AllEventsHandler<T>): void;
on<K extends keyof T>(name: K, handler: EventHandler<T, K>): void;
/**
* Remove a listener from an event
*/
off<K extends keyof T>(name: K, handler: EventHandler<T, K>): void;
/**
* Subscribe to an event and return an unsubscribe function.
*/
subscribe<K extends keyof T>(name: K, handler: EventHandler<T, K>): () => void;
/**
* Emit an event.
*/
emit<K extends keyof T>(name: K, event: T[K]): void;
}