simple-event-target
Version:
Thinnest possible wrapper around native events. It simplifies typing the custom event detail
27 lines (26 loc) • 839 B
TypeScript
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;
}