12345678910111213141516171819202122232425262728293031323334 |
- class EventBus<T extends Record<string, (...args: any[]) => any>> {
- emits: Map<keyof T, T[keyof T]> = new Map<keyof T, T[keyof T]>();
- on<K extends keyof T>(name: K, callback: T[K]): void {
- this.emits.set(name, callback);
- }
- off<K extends keyof T>(name: K): void {
- this.emits.delete(name);
- }
- exists<K extends keyof T>(name: K): boolean {
- return this.emits.has(name);
- }
- emit<K extends keyof T>(
- name: K,
- ...args: Parameters<T[K]>
- ): ReturnType<T[K]> | null {
- if (this.emits.has(name)) {
- const cb = this.emits.get(name);
- let result = null;
- try {
- result = cb!(...args);
- } catch (e) {
- console.error(e);
- }
- return result;
- }
- return null;
- }
- }
- export default EventBus;
|