UNPKG

typed-event-target

Version:

EventTarget in the browser but with strong event typing.

45 lines (44 loc) 2.28 kB
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; }