Event Map
Event-map EventEmitter: one emitter, per-event argument tuples — `[]` for an event with no arguments — declared as an object type argument, @types/node's EventMap shape, checked at compile time against string-literal event names.
import { EventEmitter } from 'events';
class Downloader extends EventEmitter<{ progress: [pct: number]; chunk: [part: string]; done: []; error: [err: Error] }> {
fetchAll(): void {
this.emit("progress", 0);
this.emit("chunk", "first part");
this.emit("progress", 50);
this.emit("chunk", "second part");
this.emit("progress", 100);
this.emit("done");
}
}
const d = new Downloader();
let received = "";
d.on("progress", (pct) => { console.log("progress: " + pct + "%"); });
d.on("chunk", (part) => { received = received + part + " "; });
d.on("done", () => { console.log("received:", received.trim()); });
d.fetchAll();
console.log("is an EventEmitter:", d instanceof EventEmitter);View source on GitHubexamples/eventemitter/event_map.ts