import { Fn } from '../../types'; import { curryRight, CurryRightRemainingParameters, CurryRightPlaceholderArr, CurryRightPartialArr } from './curryRight'; import { FN_PLACEHOLDER, isFnPlaceholder } from '../const/FN_PLACEHOLDER'; import { filter } from '../array/filter'; // todo 类型 type PartialRight = { , R = ReturnType, A extends any[] = CurryRightPlaceholderArr>>>(fn: F, ...args: A): Fn, R> >>>(fn, ...args: A): Fn, R> placeholder: FN_PLACEHOLDER } export const partialRight: PartialRight = (fn, ...args) => { return curryRight(fn, filter(args, v => !isFnPlaceholder(v)).length + 1)(...args as any); }; partialRight.placeholder = new FN_PLACEHOLDER(); // function log(name: string, age: number, flag: boolean) { // // eslint-disable-next-line // console.log(...arguments) // } // const l = partialRight(log, 18, false); // const p = l('name');