= Record<string, any>;
type EventKey<T extends EventMap> = string & keyof T;
type EventReceiver<T> = (params: T) => void;
interface Emitter<T extends EventMap> {
emit<K extends EventKey<T>>
(eventName: K, params: T[K]): void;
}
Почему в emit для params (аргументы при вызове события) задан тип как T[K]?
Если что, то вот более полный пример https://rjzaworski.com/2019/10/event-emitters-in-typescript
Ну у тебя T - это тип, определяющий возможные события и их параметры. K - имя события. Соответственно, когда ты кидаешь событие K, ты должен передать параметры соответствующего типа, это как раз T[K]
Обсуждают сегодня