declare type UnionToFuncParam = U extends any ? (k: U) => void : never; declare type UnionFuncParamToIntersection = UnionToFuncParam extends ((k: infer I) => void) ? I : never; declare type ExtractFuncParm = F extends { (a: infer A): void; } ? A : never; declare type ExcludeExact = T extends U ? U extends T ? never : T : T; declare type SpliceOne = ExcludeExact>; declare type ExtractOne = ExtractFuncParm>>; export declare type UnionReducers = 'tuple' | 'intersection' | 'function-params'; export declare type UnionReduce = UnionReduceImpl; export declare type UnionReducer = Reducer extends 'tuple' ? Container extends any[] ? [T, ...Container] : never : Reducer extends 'intersection' ? { [K in keyof (T & Container)]: (T & Container)[K]; } : Reducer extends 'function-params' ? Container extends (...args: any[]) => any ? (...args: [...Parameters, T]) => ReturnType : never : never; declare type UnionReduceImpl = SpliceOne extends never ? UnionReducer, Container> : UnionReduceImpl, UnionReducer, Container>>; export declare type ToTuple = UnionReduce; export declare type ToIntersection = UnionReduce; export declare type ToFunctionParams = UnionReduce R>; export {};