eventClasses
Prefer EventTarget over EventEmitter for cross-platform compatibility.
✅ This rule is included in the nodelogicalandlogicalStrictpresets.
While EventEmitter is only available in Node.js, EventTarget is available in browsers, Deno, and modern Node.js (v14.5+).
Using EventTarget makes code more cross-platform friendly and can reduce bundle size in built packages.
Examples
Section titled “Examples”import { class EventEmitter<T extends EventMap<T> = DefaultEventMap>interface EventEmitter<T extends EventMap<T> = DefaultEventMap>
The EventEmitter class is defined and exposed by the node:events module:
import { EventEmitter } from 'node:events';
All EventEmitters emit the event 'newListener' when new listeners are
added and 'removeListener' when existing listeners are removed.
It supports the following option:
EventEmitter } from "events";
class class MyEmitter
MyEmitter extends class EventEmitter<T extends EventMap<T> = DefaultEventMap>
The EventEmitter class is defined and exposed by the node:events module:
import { EventEmitter } from 'node:events';
All EventEmitters emit the event 'newListener' when new listeners are
added and 'removeListener' when existing listeners are removed.
It supports the following option:
EventEmitter {}
const const emitter: EventEmitter<DefaultEventMap>
emitter = new new EventEmitter<DefaultEventMap>(options?: EventEmitterOptions): EventEmitter<DefaultEventMap>
The EventEmitter class is defined and exposed by the node:events module:
import { EventEmitter } from 'node:events';
All EventEmitters emit the event 'newListener' when new listeners are
added and 'removeListener' when existing listeners are removed.
It supports the following option:
EventEmitter();class class MyTarget
MyTarget extends var EventTarget: { new (): EventTarget; prototype: EventTarget;}
EventTarget {}
const const target: EventTarget
target = new var EventTarget: new () => EventTarget
EventTarget();Options
Section titled “Options”This rule is not configurable.
When Not To Use It
Section titled “When Not To Use It”If your code exclusively targets Node.js environments and you specifically need EventEmitter’s API features that are not available in EventTarget (for example, prependListener, once returning a cleanup function, or error events with special handling), you might choose not to enable this rule.
Further Reading
Section titled “Further Reading”- MDN: EventTarget
- Node.js: EventTarget and Event API
- Node.js: Differences between EventEmitter and EventTarget
Equivalents in Other Linters
Section titled “Equivalents in Other Linters”- ESLint:
unicorn/prefer-event-target - Oxlint:
unicorn/prefer-event-target