xref: /MusicFree/src/utils/eventBus.ts (revision 740e39476f71e0e17304d812ac0a4c4cdc183ed1)
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