最后活跃于 1712112514

修订 8ac9db4764df8cbf70b7df3dbb4a119adfa87047

eventbus.ts 原始文件
1
2type Topics = {
3 "event.post": EventPost1Data;
4
5};
6
7type Callbacks<T extends keyof Topics> = (data: Topics[T]) => void;
8
9class EventBus<T extends keyof Topics> {
10 private subscribers: { [K in T]?: Callbacks<K>[] } = {};
11
12 subscribe<K extends T>(topic: K, callback: Callbacks<K>): void {
13 if (!this.subscribers[topic]) {
14 this.subscribers[topic] = [];
15 }
16 this.subscribers[topic]?.push(callback);
17 }
18
19 unsubscribe<K extends T>(topic: K, callback: Callbacks<K>): void {
20 const callbacks = this.subscribers[topic];
21 if (callbacks) {
22 this.subscribers[topic] = callbacks.filter(cb => cb !== callback);
23 }
24 }
25
26 publish<K extends T>(topic: K, payload: Topics[K]): void {
27 const callbacks = this.subscribers[topic];
28 if (callbacks) {
29 for (const callback of callbacks) {
30 callback(payload);
31 }
32 }
33 }
34}
35
36// Define topics and their corresponding payload types
37export const msgbus = new EventBus();