mitt.ts 767 B

12345678910111213141516171819202122232425262728293031323334
  1. class EventBus<T extends Record<string, (...args: any[]) => any>> {
  2. emits: Map<keyof T, T[keyof T]> = new Map<keyof T, T[keyof T]>();
  3. on<K extends keyof T>(name: K, callback: T[K]): void {
  4. this.emits.set(name, callback);
  5. }
  6. off<K extends keyof T>(name: K): void {
  7. this.emits.delete(name);
  8. }
  9. exists<K extends keyof T>(name: K): boolean {
  10. return this.emits.has(name);
  11. }
  12. emit<K extends keyof T>(
  13. name: K,
  14. ...args: Parameters<T[K]>
  15. ): ReturnType<T[K]> | null {
  16. if (this.emits.has(name)) {
  17. const cb = this.emits.get(name);
  18. let result = null;
  19. try {
  20. result = cb!(...args);
  21. } catch (e) {
  22. console.error(e);
  23. }
  24. return result;
  25. }
  26. return null;
  27. }
  28. }
  29. export default EventBus;