mitt.d.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. export type EventType = string | symbol;
  2. export type Handler<T = unknown> = (event: T) => void;
  3. export type WildcardHandler<T = Record<string, unknown>> = (
  4. type: keyof T,
  5. event: T[keyof T]
  6. ) => void;
  7. export type EventHandlerList<T = unknown> = Array<Handler<T>>;
  8. export type WildCardEventHandlerList<T = Record<string, unknown>> = Array<
  9. WildcardHandler<T>
  10. >;
  11. export type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<
  12. keyof Events | "*",
  13. EventHandlerList<Events[keyof Events]> | WildCardEventHandlerList<Events>
  14. >;
  15. export interface Emitter<Events extends Record<EventType, unknown>> {
  16. events: EventHandlerMap<Events>;
  17. on: (<Key extends keyof Events>(
  18. type: Key,
  19. handler: Handler<Events[Key]>
  20. ) => void) & ((type: "*", handler: WildcardHandler<Events>) => void);
  21. off: (<Key extends keyof Events>(
  22. type: Key,
  23. handler?: Handler<Events[Key]>
  24. ) => void) & ((type: "*", handler?: WildcardHandler<Events>) => void);
  25. emit: (<Key extends keyof Events>(type: Key, event: Events[Key]) => void) & (<Key extends keyof Events>(
  26. type: undefined extends Events[Key] ? Key : never
  27. ) => void);
  28. }
  29. export declare function mitt<Events extends Record<EventType, unknown>>(
  30. events?: EventHandlerMap<Events>
  31. ): Emitter<Events>;