@mizdra/strictly-typed-event-target
Version:
This is a strictly-typed version of `EventTarget`
21 lines • 1.73 kB
TypeScript
export interface STCustomEventInit<T> extends CustomEventInit<T> {
detail: T;
}
export interface STCustomEvent<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> extends CustomEvent<EventMap[EventName]> {
new <T extends keyof EventMap>(typeArg: T, ...ConditionalOptionalArgs: EventMap[T] extends undefined ? [STCustomEventInit<EventMap[T]>?] : [STCustomEventInit<EventMap[T]>]): STCustomEvent<EventMap, T>;
}
export interface STEventListener<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> {
(evt: STCustomEvent<EventMap, EventName>): void;
}
export interface STEventListenerObject<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> {
handleEvent(evt: STCustomEvent<EventMap, EventName>): void;
}
export declare type STEventListenerOrEventListenerObject<EventMap extends {}, EventName extends keyof EventMap = keyof EventMap> = STEventListener<EventMap, EventName> | STEventListenerObject<EventMap, EventName>;
export interface STEventTarget<EventMap extends {}> {
new (): STEventTarget<EventMap>;
addEventListener<T extends keyof EventMap>(type: T, listener: STEventListenerOrEventListenerObject<EventMap, T> | null, options?: boolean | AddEventListenerOptions): void;
dispatchEvent<CustomEvent extends STCustomEvent<EventMap, keyof EventMap>>(event: CustomEvent): boolean;
removeEventListener<T extends keyof EventMap>(type: T, callback: STEventListenerOrEventListenerObject<EventMap, T> | null, options?: EventListenerOptions | boolean): void;
}
export declare function createSTEventTarget<EventMap extends {}>(): readonly [STCustomEvent<EventMap, keyof EventMap>, STEventTarget<EventMap>];
//# sourceMappingURL=index.d.ts.map