Emitter
interface Emitter <Events extends Record<EventType, unknown>> {
all: EventHandlerMap<Events>;
emit<Key extends keyof Events>(type: Key, event: Events[Key]): void;
emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;
}