hightable
Version:
A dynamic windowed scrolling table component for react
31 lines (30 loc) • 1.42 kB
TypeScript
/**
* Type-safe event listener and dispatch signatures for the custom events
* defined in `TDetails`.
*/
export interface CustomEventTarget<TDetails> {
addEventListener<TType extends keyof TDetails>(type: TType, listener: (ev: CustomEvent<TDetails[TType]>) => any, options?: boolean | AddEventListenerOptions): void;
removeEventListener<TType extends keyof TDetails>(type: TType, listener: (ev: CustomEvent<TDetails[TType]>) => any, options?: boolean | EventListenerOptions): void;
dispatchEvent<TType extends keyof TDetails>(ev: _TypedCustomEvent<TDetails, TType>): void;
}
/**
* Internal declaration for the `typeof` trick below.
* Never actually implemented.
*/
declare class _TypedCustomEvent<TDetails, TType extends keyof TDetails> extends CustomEvent<TDetails[TType]> {
constructor(type: TType, eventInitDict: {
detail: TDetails[TType];
} & EventInit);
}
/**
* Typed custom event (technically a typed alias of `CustomEvent`).
* Use with `CustomEventTarget.dispatchEvent` to infer `detail` types
* automatically.
*/
export declare const TypedCustomEvent: typeof _TypedCustomEvent;
export declare function createEventTarget<TDetails>(): CustomEventTarget<TDetails>;
export declare function cloneEventTarget<TDetails>(eventTarget: CustomEventTarget<TDetails>, eventTypes: (keyof TDetails)[]): {
eventTarget: CustomEventTarget<TDetails>;
detach: () => void;
};
export {};