1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
// @strict: true
// @noEmit: true
type Tuple<T> = readonly [T, ...T[]];
declare function bindAll<
TTarget extends EventTarget,
TTypes extends Tuple<keyof TTarget & `on${any}`>
>(
target: TTarget,
bindings: {
[K in keyof TTypes]: {
type: TTypes[K];
listener: (
ev: Parameters<Extract<TTarget[TTypes[K]], (...args: any[]) => any>>[0]
) => void;
};
}
): void;
bindAll({} as HTMLButtonElement, [
{
type: "onclick",
listener: (event) => {},
},
{
type: "onkeydown",
listener: (event) => {},
},
]);
|