UNPKG

@toolpad/utils

Version:

Shared utilities used by Toolpad packages.

28 lines (27 loc) 1 kB
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; }