Typesafe Event Emitter
Conventionally in Node.js and traditional JavaScript you have a single event emitter. This event emitter internally tracks listener for different event types e.g.
const emitter = new EventEmitter();
// Emit:
emitter.emit('foo', foo);
emitter.emit('bar', bar);
// Listen:
emitter.on('foo', (foo)=>console.log(foo));
emitter.on('bar', (bar)=>console.log(bar));Essentially EventEmitter internally stores data in the form of mapped arrays:
{foo: [fooListeners], bar: [barListeners]}Instead, for the sake of event type safety, you can create an emitter per event type:
const onFoo = new TypedEvent<Foo>();
const onBar = new TypedEvent<Bar>();
// Emit:
onFoo.emit(foo);
onBar.emit(bar);
// Listen:
onFoo.on((foo)=>console.log(foo));
onBar.on((bar)=>console.log(bar));This has the following advantages:
The types of events are easily discoverable as variables.
The event emitter variables are easily refactored independently.
Type safety for event data structures.
Reference TypedEvent
Last updated
Was this helpful?