UNPKG

simple-event-target

Version:

Thinnest possible wrapper around native events. It simplifies typing the custom event detail

27 lines (26 loc) 839 B
export type SimpleEventListener<Detail> = (detail: Detail) => void; export type SimpleEventListenerOptions = { signal?: AbortSignal; once?: boolean; }; /** * Thinnest possible wrapper around native events * * @usage * const smokeSignals = new SimpleEventTarget(); * smokeSignals.subscribe(details => console.log(details)) * smokeSignals.emit('The BBQ is ready'); */ export default class SimpleEventTarget<Detail = void> { #private; /** * @deprecated Only for advanced use cases. Using this will break the type safety. */ get raw(): { eventType: string; eventTarget: EventTarget; }; subscribe(callback: SimpleEventListener<Detail>, options?: SimpleEventListenerOptions): void; unsubscribe(callback: SimpleEventListener<Detail>): void; emit(detail: Detail): void; }