API Reference
EventEmitter<Events> exposes the familiar on/off/once/emit API plus utilities for teardown and diagnostics. Below, Events represents your event map (keys to tuple payloads).
Typing events
interface GraphEvents {
ready: [void]
data: [{ nodes: number }]
error: [Error]
}
const emitter = new EventEmitter<GraphEvents>()- Always use tuples (
[void],[{ foo: string }],[number, boolean]). voidmeans “no args”. A lone{}type would still expect one object argument.
Methods
on(event, listener): this
Registers listener and returns the emitter for chaining.
emitter.on('data', ({ nodes }) => console.log(nodes))Listeners run synchronously in registration order. Throwing inside a listener rejects the emit call.
once(event, listener): this
Registers a listener that removes itself after the first invocation.
emitter.once('ready', () => console.log('bootstrap complete'))emit(event, ...args): boolean
Invokes every listener for event. Returns false when no listeners were present.
const dispatched = emitter.emit('data', { nodes: 42 })
if (!dispatched) console.warn('nobody was listening')Errors thrown inside listeners bubble up—wrap handlers if you need isolation.
off(event, listener?): this
Removes a specific listener or clears all listeners for event if listener is omitted.
const handler = () => {}
emitter.on('data', handler)
emitter.off('data', handler) // remove single
emitter.off('data') // remove all for "data"clearListeners(event?): this
Alias for off(event). When called without arguments it clears every event—including the internal map.
emitter.clearListeners() // teardown everythinglistenerCount(event?): number
Returns the number of listeners for event, or the total across all events when omitted.
console.log(emitter.listenerCount('data'))
console.log(emitter.listenerCount()) // totalPatterns
Proxy DOM events
const domEmitter = new EventEmitter<{ click: [MouseEvent] }>()
document.addEventListener('click', (evt) => domEmitter.emit('click', evt))Bridge between modules
export const graphEvents = new EventEmitter<GraphEvents>()
export const onGraphData = (fn: GraphEvents['data'][0]) => graphEvents.on('data', fn)More recipes live in usage patterns.