UNPKG

ut2

Version:

一个现代 JavaScript 实用工具库。[点击查看在线文档]。

124 lines (123 loc) 6.49 kB
declare const PLACEHOLDER: { __ut2_curry_ph__: null; }; type Placeholder = typeof PLACEHOLDER; interface Curry { <T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>; <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>; <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>; <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>; <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>; (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any; placeholder: Placeholder; _: Placeholder; } interface CurriedFunction1<T1, R> { (t1: T1): R; (t1: Placeholder): CurriedFunction1<T1, R>; (): CurriedFunction1<T1, R>; } interface CurriedFunction2<T1, T2, R> { (t1: Placeholder, t2: T2): CurriedFunction1<T1, R>; (t1: T1, t2: T2): R; (t1: T1): CurriedFunction1<T2, R>; (t1: Placeholder): CurriedFunction2<T1, T2, R>; (): CurriedFunction2<T1, T2, R>; } interface CurriedFunction3<T1, T2, T3, R> { (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction2<T1, T2, R>; (t1: Placeholder, t2: T2, t3: T3): CurriedFunction1<T1, R>; (t1: T1, t2: Placeholder, t3: T3): CurriedFunction1<T2, R>; (t1: T1, t2: T2, t3: T3): R; (t1: Placeholder, t2: T2): CurriedFunction2<T1, T3, R>; (t1: T1, t2: T2): CurriedFunction1<T3, R>; (t1: T1): CurriedFunction2<T2, T3, R>; (t1: Placeholder): CurriedFunction3<T1, T2, T3, R>; (): CurriedFunction3<T1, T2, T3, R>; } interface CurriedFunction4<T1, T2, T3, T4, R> { (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T1, T2, T3, R>; (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>; (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T1, T3, R>; (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction2<T2, T3, R>; (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction1<T3, R>; (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction1<T2, R>; (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>; (t1: T1, t2: T2, t3: T3, t4: T4): R; (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction3<T1, T2, T4, R>; (t1: T1, t2: Placeholder, t3: T3): CurriedFunction2<T2, T4, R>; (t1: Placeholder, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>; (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>; (t1: Placeholder, t2: T2): CurriedFunction3<T1, T3, T4, R>; (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>; (t1: T1): CurriedFunction3<T2, T3, T4, R>; (t1: Placeholder): CurriedFunction4<T1, T2, T3, T4, R>; (): CurriedFunction4<T1, T2, T3, T4, R>; } interface CurriedFunction5<T1, T2, T3, T4, T5, R> { (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>; (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>; (t1: Placeholder, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction3<T1, T2, T4, R>; (t1: Placeholder, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T1, T3, T4, R>; (t1: T1, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T2, T3, T4, R>; (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>; (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>; (t1: Placeholder, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T1, T4, R>; (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>; (t1: T1, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T2, T4, R>; (t1: T1, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction2<T3, T4, R>; (t1: T1, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction1<T4, R>; (t1: T1, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction1<T3, R>; (t1: T1, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>; (t1: Placeholder, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>; (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R; (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>; (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>; (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction3<T1, T3, T5, R>; (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T2, T3, T5, R>; (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T3, T5, R>; (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>; (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>; (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>; (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>; (t1: T1, t2: Placeholder, t3: T3): CurriedFunction3<T2, T4, T5, R>; (t1: Placeholder, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>; (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>; (t1: Placeholder, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>; (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>; (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>; (t1: Placeholder): CurriedFunction5<T1, T2, T3, T4, T5, R>; (): CurriedFunction5<T1, T2, T3, T4, T5, R>; } /** * 创建一个函数。该函数接受 `func` 参数,在提供的参数数量达到 `arity` 后调用 `func` 并返回其结果。 * * `curry._` `curry.placeholder` 可用作参数的占位符。 * * @function * @alias module:Function.curry * @since 1.8.0 * @param {Function} func 需要柯里化的函数。 * @param {number} [arity] 指定参数数量。默认值为 `func.length`。 * @returns {Function} 新的柯里化函数。 * @example * * function abc(a, b, c){ * return [a, b, c]; * } * * var curried = curry(abc); * * curried(1)(2)(3); // [1, 2, 3] * * curried(1, 2)(3); // [1, 2, 3] * * curried(1, 2, 3); // [1, 2, 3] * * curried(1)(curry._, 3)(2); // [1, 2, 3] * * curried(curry._, curry._, 3)(curry._, 2)(1); // [1, 2, 3] * */ declare const curry: Curry; export default curry;