export type EventHandler = (payload: T) => void; export type EventMap = Record; export type EventKey = string & keyof T; export type EventPayload> = T[K]; export type EventHandlerFor> = (payload: EventPayload) => void; export interface EventBusOptions { /** 是否允许重复订阅同一个回调,默认 false(不允许,会报错/静默忽略) */ allowDuplicate?: boolean; /** 遇到重复订阅时是抛出错误还是静默忽略,默认 false(静默忽略) */ throwOnDuplicate?: boolean; } export declare class EventBus { private events; private options; constructor(options?: EventBusOptions); /** * 订阅事件 * @param event 事件名称 * @param handler 回调函数 * @returns 取消订阅的函数 */ on>(event: K, handler: EventHandlerFor): () => void; /** * 订阅事件,只触发一次后自动取消订阅 * @param event 事件名称 * @param handler 回调函数 * @returns 取消订阅的函数 */ once>(event: K, handler: EventHandlerFor): () => void; /** * 取消订阅事件 * @param event 事件名称 * @param handler 回调函数,不传则取消该事件的所有订阅 */ off>(event: K, handler?: EventHandlerFor): void; /** * 触发事件 * @param event 事件名称 * @param payload 事件参数 */ emit>(event: K, payload: EventPayload): void; /** * 检查事件是否有订阅者 * @param event 事件名称 * @returns boolean */ has>(event: K): boolean; /** * 获取事件的订阅者数量 * @param event 事件名称 * @returns number */ listenerCount>(event: K): number; /** * 获取所有已注册的事件名称 * @returns string[] */ eventNames(): string[]; /** * 清空所有事件订阅 */ clear(): void; } /** * 创建类型安全的事件总线 * @example * ```ts * interface MyEvents { * login: { userId: string; name: string } * logout: void * error: Error * } * * const bus = createEventBus() * * * bus.emit('login', { userId: '1', name: 'Tom' }) * ``` */ export declare function createEventBus(options?: EventBusOptions): EventBus; export default EventBus;