type Combinations, Acc extends Array = []> = A extends [a: infer A, ...rest: infer Rest] ? [[...Acc, A], ...Combinations] : [] type Curried any, LeftArgs extends Array = [Parameters[0]]> = T extends (...args: LeftArgs) => any ? T : T extends (...args: [...LeftArgs, ...infer V]) => infer R ? (...args: LeftArgs) => Curried<(...args: V) => R, LeftArgs> : T extends (a: infer A) => infer R ? (arg_last: A) => R : T extends (a: infer A, ...rest: infer V) => infer R ? ((arg_inner: A) => Curried<(...args: V) => R, LeftArgs>) : never type CurriedVariants< T extends (...args: any) => any, C extends any[][] = Combinations> > = T extends () => any ? [T] : { [Cn in keyof C]: Curried>}; type Named = { [key in QueryKey]: Value; } type NamedCurriedVariants any, V = CurriedVariants> = { [C in keyof V]: C extends `${number}` ? Named : never }; type UnionToIntersection = (U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never type InterfaceValues = T extends Record ? Inner : never; type ToFunctional = Func extends (...a: infer U) => infer R ? (...a: [...U, ExtraArg]) => R: never; type Functions = { [x: string]: (...args: any) => any }; export type Typify = { [ K in keyof T ]: T[K] }; export type Functionalify, ExtraArg> = UnionToIntersection, ToFunctional>[number]> }>>