UNPKG

@worker-tools/typed-event-target

Version:

This is the Typed Event Target library you are looking for.

20 lines (19 loc) 1.4 kB
export interface TypedEventListener<E extends Event> { (evt: E): void; } export interface TypedEventListenerObject<E extends Event> { handleEvent(object: E): void; } export declare type TypedEventListenerOrEventListenerObject<E extends Event> = TypedEventListener<E> | TypedEventListenerObject<E>; declare type StringKeyOf<T> = keyof T extends string ? keyof T : never; export interface TypedEventTarget<EventMap extends Record<K, Event> = Record<string, Event>, K extends string = StringKeyOf<EventMap>> extends EventTarget { addEventListener<K extends keyof EventMap>(type: K, listener: TypedEventListenerOrEventListenerObject<EventMap[K]> | null, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; removeEventListener<K extends keyof EventMap>(type: K, listener: TypedEventListenerOrEventListenerObject<EventMap[K]> | null, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void; } export declare const TypedEventTarget: { prototype: EventTarget; new <EventMap extends Record<K, Event> = Record<string, Event>, K extends string = StringKeyOf<EventMap>>(): TypedEventTarget<EventMap, K>; }; export {};