import { FN_PLACEHOLDER } from '../const/FN_PLACEHOLDER'; import { Fn } from '../../types'; /** * 返回T的子集 从最后一个元素开始 * @param T 参数数组 */ export declare type CurryRightPartialArr = T extends [infer A, ...infer As] ? T | CurryRightPartialArr : [ ]; /** * 返回可能的参数组合 * @param T 参数的数组 * @param P 占位符 */ export declare type CurryRightPlaceholderArr = T extends [infer A1] ? T : T extends [...infer As, infer A1] ? [ ...CurryRightPlaceholderArr, A1 ] | [...CurryRightPlaceholderArr, P] : [ ]; /** * 剩余需要传递的参数 * @param Expected 需要的参数 * @param Provided 已经传递的参数 */ export declare type CurryRightRemainingParameters = Expected extends [...infer EX, infer E1] ? Provided extends [...infer PX, infer P1] ? P1 extends P ? [ ...CurryRightRemainingParameters, E1 ] : CurryRightRemainingParameters : Expected : [ ]; export declare type CurryRightCurriedPlaceholderArgs = CurryRightPlaceholderArr>; export declare type CurryRightCurriedFunction = , T extends CurryRightCurriedPlaceholderArgs>(...args: T) => T extends Exp ? R : CurryRightCurriedFunction; export interface CurryRight { (fn: F): CurryRightCurriedFunction, [], ReturnType>; (fn: F, arity: number): CurryRightCurriedFunction, [], ReturnType>; placeholder: FN_PLACEHOLDER; } /** * @category Function * @param {function} fn * @param {number} arity * @returns {function} */ export declare const curryRight: CurryRight;