From abd7cc619e7b53819bbc3f2e8bbb9854e50e185f Mon Sep 17 00:00:00 2001 From: Harvmaster Date: Fri, 7 Aug 2026 01:41:50 +0000 Subject: [PATCH] Remove type assertion: --- source/event-emitter.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/event-emitter.ts b/source/event-emitter.ts index e455a08..da22964 100644 --- a/source/event-emitter.ts +++ b/source/event-emitter.ts @@ -2,13 +2,21 @@ export type EventMap = Record; type Listener = (detail: T) => void; +/** + * Internally permits listeners for individual event payloads to be stored + * in a collection typed with the union of all event payloads. + */ +type StoredListener = { + bivarianceHack(detail: Readonly): void; +}['bivarianceHack']; + /** * A listener entry. - * @template T - The event type. + * @template T - The event payload type. */ interface ListenerEntry { - listener: Listener; - wrappedListener: Listener; + listener: StoredListener; + wrappedListener: StoredListener; debounceTime?: number; once?: boolean; } @@ -50,7 +58,7 @@ export class EventEmitter { }; // Add the listener entry to the listeners map. - this.listeners.get(type)?.add(listenerEntry as ListenerEntry); + this.#listeners.get(type)?.add(listenerEntry); // Return an "off" callback that can be called to stop listening for events. return () => this.off(type, listener); @@ -87,7 +95,7 @@ export class EventEmitter { }; // Add the listener entry to the listeners map. - this.listeners.get(type)?.add(listenerEntry as ListenerEntry); + this.#listeners.get(type)?.add(listenerEntry); // Return an "off" callback that can be called to stop listening for events. return () => this.off(type, listener);