export type EventType = string | symbol; export type Handler = (event: T) => void; export type WildcardHandler> = ( type: keyof T, event: T[keyof T], ) => void; export type EventHandlerList = Array>; export type WildCardEventHandlerList> = Array< WildcardHandler >; export type EventHandlerMap> = Map< keyof Events | '*', EventHandlerList | WildCardEventHandlerList >; export interface Emitter> { all: EventHandlerMap; on(type: Key, handler: Handler): void; on(type: '*', handler: WildcardHandler): void; off( type: Key, handler?: Handler, ): void; off(type: '*', handler: WildcardHandler): void; emit(type: Key, event: Events[Key]): void; emit( type: undefined extends Events[Key] ? Key : never, ): void; } /** * Mitt: Tiny (~200b) functional event emitter / pubsub. * @name mitt * @returns {Mitt} */ export default function mitt>( all?: EventHandlerMap, ): Emitter; declare global { interface Window { eventBus: Emitter; } }