TypedEventEmitter
type: type-only
The TypedEventEmitter type adds compile-time typing to event names and listener arguments for a Node.js EventEmitter instance.
Usage
import { EventEmitter } from 'node:events';import type { TypedEventEmitter } from '@mustib/utils/node';
type MyEvents = { success: undefined; fail: { message: string; code: number }; data: [id: string, payload: { ok: boolean }];};
const emitter = new EventEmitter() as TypedEventEmitter<MyEvents>;
emitter.on('success', () => {});emitter.on('fail', ({ message, code }) => { console.log(message, code);});emitter.on('data', (id, payload) => { console.log(id, payload.ok);});
emitter.emit('success', undefined);emitter.emit('fail', { message: 'error', code: 500 });emitter.emit('data', 'evt-1', { ok: true });Definition
type TypedEventEmitter<T extends Record<string, any>> = { emit<Name extends keyof T, Args extends T[Name]>( eventName: Name, ...args: Args extends any[] ? Args : [Args] ): boolean; // typed on/once/addListener/prependListener/prependOnceListener/off/removeListener}