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.
tailchat/shared/event/index.ts

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);
},
};