/* * @创建者: oliverfan * @内容描述: 新建事件总线,提供事件订阅和发布功能 */ type EventCallback = (...args) => any; class EventBus { private listeners = new Map(); public on(eventName: string, callback: EventCallback) { if (!this.listeners.has(eventName)) { this.listeners.set(eventName, [callback]); } else { const callbacks = this.listeners.get(eventName); callbacks.push(callback); this.listeners.set(eventName, callbacks); } } public emit(eventName: string, ...args) { if (!this.listeners.has(eventName)) { // console.warn(`未注册过此方法【${eventName}】`); return; } this.listeners.get(eventName).forEach((callback) => { callback(...args); }); } public off(eventName?: string, callback?: EventCallback) { if (!eventName) { this.listeners.clear(); return; } if (!callback) { this.listeners.delete(eventName); return; } const callbacks = this.listeners.get(eventName); const newCallbacks = callbacks.filter(cb => cb !== callback); this.listeners.set(eventName, newCallbacks); } } export { EventCallback, EventBus };