Например, если у нас есть следующий код,
type Events = {
SOME_EVENT: number
OTHER_EVENT: string
ANOTHER_EVENT: undefined
}
interface EventEmitter<EventTypes> {
on<K extends keyof EventTypes>(s: K, listener: (v: EventTypes[K]) => void);
}
declare const emitter: EventEmitter<Events>;
emitter.on('SOME_EVENT', (payload) => testNumber(payload));
emitter.on('OTHER_EVENT', (payload) => testString(payload));
function testNumber( value: number ) {}
function testString( value: string ) {}
который работает (ссылка на игровую площадку), как сделать так, чтобы вызовы emit не требовали второго аргумента для события ANOTHER_EVENT
?
Например, я могу добавить следующую строку, и она работает:
emitter.emit('OTHER_EVENT', 'foo')
Но если я хочу вызвать emit
с 'ANOTHER_EVENT'
, я бы хотел сделать это без второго аргумента:
emitter.emit('ANOTHER_EVENT') // ERROR, expected 2 arguments, but got 1.
который выдает ошибку, потому что ожидает второй аргумент. (ссылка на игровую площадку< /а>)
Чтобы заставить его работать, я должен написать:
emitter.emit('ANOTHER_EVENT', undefined)
Как мы можем сделать второй аргумент необязательным только для случая, когда мы вызываем emit
с 'ANOTHER_EVENT'
?