Skip to content

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

ts
interface GraphEvents {
  ready: [void]
  data: [{ nodes: number }]
  error: [Error]
}
const emitter = new EventEmitter<GraphEvents>()
  • Always use tuples ([void], [{ foo: string }], [number, boolean]).
  • void means “no args”. A lone {} type would still expect one object argument.

Methods

on(event, listener): this

Registers listener and returns the emitter for chaining.

ts
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.

ts
emitter.once('ready', () => console.log('bootstrap complete'))

emit(event, ...args): boolean

Invokes every listener for event. Returns false when no listeners were present.

ts
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.

ts
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.

ts
emitter.clearListeners() // teardown everything

listenerCount(event?): number

Returns the number of listeners for event, or the total across all events when omitted.

ts
console.log(emitter.listenerCount('data'))
console.log(emitter.listenerCount()) // total

Patterns

Proxy DOM events

ts
const domEmitter = new EventEmitter<{ click: [MouseEvent] }>()
document.addEventListener('click', (evt) => domEmitter.emit('click', evt))

Bridge between modules

ts
export const graphEvents = new EventEmitter<GraphEvents>()
export const onGraphData = (fn: GraphEvents['data'][0]) => graphEvents.on('data', fn)

More recipes live in usage patterns.

Built with VitePress – Released under the MIT License.