Remove type assertion:

This commit is contained in:
2026-08-07 01:41:50 +00:00
parent 67fd28a01f
commit abd7cc619e
+13 -5
View File
@@ -2,13 +2,21 @@ export type EventMap = Record<string, unknown>;
type Listener<T> = (detail: T) => void; type Listener<T> = (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<T> = {
bivarianceHack(detail: Readonly<T>): void;
}['bivarianceHack'];
/** /**
* A listener entry. * A listener entry.
* @template T - The event type. * @template T - The event payload type.
*/ */
interface ListenerEntry<T> { interface ListenerEntry<T> {
listener: Listener<T>; listener: StoredListener<T>;
wrappedListener: Listener<T>; wrappedListener: StoredListener<T>;
debounceTime?: number; debounceTime?: number;
once?: boolean; once?: boolean;
} }
@@ -50,7 +58,7 @@ export class EventEmitter<T extends EventMap> {
}; };
// Add the listener entry to the listeners map. // Add the listener entry to the listeners map.
this.listeners.get(type)?.add(listenerEntry as ListenerEntry<T[keyof T]>); this.#listeners.get(type)?.add(listenerEntry);
// Return an "off" callback that can be called to stop listening for events. // Return an "off" callback that can be called to stop listening for events.
return () => this.off(type, listener); return () => this.off(type, listener);
@@ -87,7 +95,7 @@ export class EventEmitter<T extends EventMap> {
}; };
// Add the listener entry to the listeners map. // Add the listener entry to the listeners map.
this.listeners.get(type)?.add(listenerEntry as ListenerEntry<T[keyof T]>); this.#listeners.get(type)?.add(listenerEntry);
// Return an "off" callback that can be called to stop listening for events. // Return an "off" callback that can be called to stop listening for events.
return () => this.off(type, listener); return () => this.off(type, listener);