1import EventEmitter from 'eventemitter3'; 2 3class EventBus<EventTypes> { 4 private ee: EventEmitter; 5 6 constructor() { 7 this.ee = new EventEmitter(); 8 } 9 10 /** 11 * 监听 12 * @param eventName 事件名 13 * @param callBack 回调 14 */ 15 on<T extends EventTypes, K extends keyof T & (string | symbol)>( 16 eventName: K, 17 callBack: (payload: T[K]) => void, 18 ) { 19 this.ee.on(eventName, callBack); 20 } 21 22 once<T extends EventTypes, K extends keyof T & (string | symbol)>( 23 eventName: K, 24 callBack: (payload: T[K]) => void, 25 ) { 26 this.ee.once(eventName, callBack); 27 } 28 29 emit<T extends EventTypes, K extends keyof T & (string | symbol)>( 30 eventName: K, 31 payload?: T[K], 32 ) { 33 this.ee.emit(eventName, payload); 34 } 35 36 off<T extends EventTypes, K extends keyof T & (string | symbol)>( 37 eventName: K, 38 callBack: (payload: T[K]) => void, 39 ) { 40 this.ee.off(eventName, callBack); 41 } 42} 43 44export default EventBus; 45