typed-event-target
Version:
EventTarget in the browser but with strong event typing.
45 lines (44 loc) • 2.28 kB
TypeScript
import { type ExtractEventByType, type ExtractEventTypes } from './events/event-types.js';
import { type TypedEventListenerOrEventListenerObject } from './listener.js';
/**
* Extract event types from an already-defined `TypedEventTarget` instance or sub-class.
*
* @category Internal
*/
export type EventTypesFromEventTarget<EventTargetGeneric extends TypedEventTarget<Event>> = EventTargetGeneric extends TypedEventTarget<infer InferredEventTypeGeneric> ? InferredEventTypeGeneric : never;
/**
* An EventTarget sub-class with typing for allowed events.
*
* @category Main
*/
export declare class TypedEventTarget<const PossibleEvents extends Readonly<Event>> extends EventTarget {
protected setupListeners: {
type: string;
callback: TypedEventListenerOrEventListenerObject<any>;
options: boolean | EventListenerOptions | undefined;
}[];
/**
* Get a count of all currently attached listeners. If a listener is removed, it will no longer
* be counted.
*/
getListenerCount(): number;
/**
* Add an event listener. Has the same API as the built-in `EventTarget.addEventListener` method
* but with added event types.
*/
addEventListener<const EventType extends ExtractEventTypes<PossibleEvents>>(type: EventType, callback: TypedEventListenerOrEventListenerObject<ExtractEventByType<PossibleEvents, EventType>> | null, options?: boolean | AddEventListenerOptions | undefined): void;
/**
* Dispatch a typed event. Has the same API as the built-in `EventTarget.dispatchEvent` method
* but with added event types.
*/
dispatchEvent(event: PossibleEvents): boolean;
/**
* Remove an already-added event listener. Has the same API as the built-in
* `EventTarget.removeEventListener` method but with added event types.
*/
removeEventListener<const EventType extends ExtractEventTypes<PossibleEvents>>(type: EventType, callback: TypedEventListenerOrEventListenerObject<ExtractEventByType<PossibleEvents, EventType>> | null, options?: boolean | EventListenerOptions | undefined): void;
/** Remove all currently attached event listeners. */
removeAllEventListeners(): void;
/** Remove all internal state to free up resources. */
destroy(): void;
}