/* eslint-disable @typescript-eslint/no-explicit-any */ export type ObjectWithPrefix = { [K in keyof T as K extends string ? `${P}.${K}` : never]: T[K]; }; export type NestedKeyOf = { [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object ? `${Key}` | `${Key}.${NestedKeyOf}` : `${Key}`; }[keyof ObjectType & (string | number)]; export type KeysMatchingValueType = { [K in keyof T]: T[K] extends V ? K : never; }[keyof T]; export type PickEventParameters = { // eslint-disable-next-line @typescript-eslint/no-explicit-any [P in K]: T[K] extends (...args: any[]) => any ? Parameters : []; }; export type Last = T extends [...infer _I, infer L] ? L : T extends [...infer _I, (infer L)?] ? L | undefined : never; export type AllButLast = T extends [...infer H, infer _L] ? H : any[]; export type AllButFirst = T extends [infer _F, ...infer H] ? H : any[]; export type AllButFirstOrLast = AllButLast>; export type OmitFirstArg = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never; type FunctionType = (...args: any[]) => any; export type EventMapEmit = ( name: T, ...args: K extends FunctionType ? Parameters : K extends any[] ? K : [K] ) => K extends FunctionType ? ReturnType : void; export type ArrayUnion< T extends [string, ...string[]] | readonly [string, ...string[]], > = T[number]; export type PromiseWithResolver = { promise: Promise; resolve: (value: T | PromiseLike) => void; reject: (reason?: any) => void; };