mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
706 B
TypeScript
33 lines
706 B
TypeScript
import { EventEmitter } from 'events';
|
|
|
|
/**
|
|
* 共享事件类型
|
|
*/
|
|
export interface SharedEventMap {
|
|
/**
|
|
* 修改配色方案
|
|
*/
|
|
loadColorScheme: (schemeName: string) => void;
|
|
}
|
|
export type SharedEventType = keyof SharedEventMap;
|
|
|
|
const bus = new EventEmitter();
|
|
|
|
/**
|
|
* 事件中心
|
|
*/
|
|
export const sharedEvent = {
|
|
on<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
|
|
bus.on(eventName, listener);
|
|
},
|
|
off<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
|
|
bus.off(eventName, listener);
|
|
},
|
|
emit<T extends SharedEventType>(
|
|
eventName: T,
|
|
...args: Parameters<SharedEventMap[T]>
|
|
) {
|
|
bus.emit(eventName, ...args);
|
|
},
|
|
};
|