Skip to content

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
}