curry
Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument. This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
Signature
typescript
function curry<R>(func: () => R): () => R;
function curry<P, R>(func: (p: P) => R): (p: P) => R;
function curry<P1, P2, R>(func: (p1: P1, p2: P2) => R): (p1: P1) => (p2: P2) => R;
function curry<P1, P2, P3, R>(func: (p1: P1, p2: P2, p3: P3) => R): (p1: P1) => (p2: P2) => (p3: P3) => R;
function curry<P1, P2, P3, P4, R>(
func: (p1: P1, p2: P2, p3: P3, p4: P4) => R
): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => R;
function curry<P1, P2, P3, P4, P5, R>(
func: (p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R
): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => (p5: P5) => R;
function curry(func: (...args: any[]) => any): (...args: any[]) => any;
Parameters
func
(Function
): The function to curry.
Returns
(Function
): A curried function that can be called with a single argument at a time.
Examples
typescript
function sum(a: number, b: number, c: number) {
return a + b + c;
}
const curriedSum = curry(sum);
// The parameter `a` should be given the value `10`.
const sum10 = curriedSum(10);
// The parameter `b` should be given the value `15`.
const sum25 = sum10(15);
// The parameter `c` should be given the value `5`. The function 'sum' has received all its arguments and will now return a value.
const result = sum25(5);
Lodash Compatibility
Import curry
from es-toolkit/compat
for full compatibility with lodash.
Signature
typescript
function curry(
func: (...args: any[]) => any,
arity: number = func.length,
guard?: unknown
): ((...args: any[]) => any) & { placeholder: typeof curry.placeholder };
namespace curry {
placeholder: symbol;
}
curry
accepts an additional numeric parameter,arity
, which specifies the number of arguments the function should accept.- Defaults to the
length
property of the function. Ifarity
is negative orNaN
, it will be converted to0
. If it's a fractional number, it will be rounded down to the nearest integer.
- Defaults to the
guard
enables use as an iteratee for methods likeArray#map
.- The
curry.placeholder
value, which defaults to asymbol
, may be used as a placeholder for partially applied arguments. - Unlike the native
curry
, this function allows multiple arguments to be called at once and returns a new function that accepts the remaining arguments.
Examples
typescript
import { curry } from 'es-toolkit/compat';
const abc = function (a, b, c) {
return Array.from(arguments);
};
let 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 with placeholders.
curried(1)(curry.placeholder, 3)(2);
// => [1, 2, 3]
// Curried with arity.
curried = curry(abc, 2);
curried(1)(2);
// => [1, 2]