createEventEmitter
expérimentaldepuis 0.1.0@legba-core/core
createEventEmitter
Ce que ça fait
Crée un bus d’événements typé, sans dépendance à Node (EventEmitter de node:events n’est pas utilisé).
Signature
function createEventEmitter<EventMap extends Record<string, unknown>>(): LegbaEventEmitter<EventMap>
Paramètres
Aucun paramètre. EventMap est un paramètre de type : un objet associant chaque nom d’événement au type de son payload.
Retour
Un LegbaEventEmitter<EventMap> avec on, off, emit et clear().
Erreurs
Aucune. emit sur un événement sans écouteur, ou off sur un écouteur déjà retiré, ne lèvent jamais.
Exemple minimal
import { createEventEmitter } from "@legba-core/core";
interface Events extends Record<string, unknown> {
ping: string;
}
const emitter = createEventEmitter<Events>();
emitter.on("ping", (payload) => console.log(payload));
emitter.emit("ping", "pong");
Exemple complet
import { createEventEmitter } from "@legba-core/core";
interface Events extends Record<string, unknown> {
progress: { percent: number };
}
const emitter = createEventEmitter<Events>();
const onProgress = (payload: { percent: number }) => console.log(payload.percent);
emitter.on("progress", onProgress);
emitter.emit("progress", { percent: 50 });
emitter.off("progress", onProgress); // ne sera plus notifié
emitter.clear(); // retire tous les écouteurs, tous événements confondus
Pièges
- L’interface
EventMapdoit étendreRecord<string, unknown>explicitement (interface Events extends Record<string, unknown> { ... }), sinon TypeScript refuse l’appel générique.