ts-flex-query
Version:
Flexible and type-safe data queries
11 lines (10 loc) • 1.19 kB
TypeScript
import { PipeOperator } from '../..';
import { publicFunctionContainers } from '../../functions/main';
import { FuncFields, UnionToIntersection } from '../../types/utils';
type FlattenedFunctions = {
[TMember in FuncFields<UnionToIntersection<typeof publicFunctionContainers[keyof typeof publicFunctionContainers]>> & string]: UnionToIntersection<typeof publicFunctionContainers[keyof typeof publicFunctionContainers]>[TMember];
};
type PipeOperators<TIn, TArgs extends unknown[]> = TArgs extends [infer TFirst, ...infer TRest] ? [PipeOperator<TIn, TFirst>, ...PipeOperators<TIn, TRest>] : [];
export declare function customFunc<TIn, TContainer extends Record<any, (...xs: any) => any>, TMember extends keyof TContainer & string>(container: TContainer, member: TMember, ...args: NoInfer<PipeOperators<TIn, Parameters<TContainer[TMember]>>>): TContainer[TMember] extends (...xs: any) => any ? PipeOperator<TIn, ReturnType<TContainer[TMember]>> : never;
export declare function func<TIn, TFunc extends keyof FlattenedFunctions>(key: TFunc, ...args: NoInfer<PipeOperators<TIn, Parameters<FlattenedFunctions[TFunc]>>>): PipeOperator<TIn, ReturnType<FlattenedFunctions[TFunc]>>;
export {};