source: node_modules/es-toolkit/dist/compat/function/curry.d.ts

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 7.5 KB
Line 
1type __ = typeof curryPlaceholder;
2interface CurriedFunction1<T1, R> {
3 (): CurriedFunction1<T1, R>;
4 (t1: T1): R;
5}
6interface CurriedFunction2<T1, T2, R> {
7 (): CurriedFunction2<T1, T2, R>;
8 (t1: T1): CurriedFunction1<T2, R>;
9 (t1: __, t2: T2): CurriedFunction1<T1, R>;
10 (t1: T1, t2: T2): R;
11}
12interface CurriedFunction3<T1, T2, T3, R> {
13 (): CurriedFunction3<T1, T2, T3, R>;
14 (t1: T1): CurriedFunction2<T2, T3, R>;
15 (t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
16 (t1: T1, t2: T2): CurriedFunction1<T3, R>;
17 (t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
18 (t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
19 (t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
20 (t1: T1, t2: T2, t3: T3): R;
21}
22interface CurriedFunction4<T1, T2, T3, T4, R> {
23 (): CurriedFunction4<T1, T2, T3, T4, R>;
24 (t1: T1): CurriedFunction3<T2, T3, T4, R>;
25 (t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
26 (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
27 (t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
28 (t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
29 (t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
30 (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
31 (t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
32 (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
33 (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
34 (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
35 (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
36 (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
37 (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
38 (t1: T1, t2: T2, t3: T3, t4: T4): R;
39}
40interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
41 (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
42 (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
43 (t1: __, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
44 (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
45 (t1: __, t2: __, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
46 (t1: T1, t2: __, t3: T3): CurriedFunction3<T2, T4, T5, R>;
47 (t1: __, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
48 (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
49 (t1: __, t2: __, t3: __, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
50 (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction3<T2, T3, T5, R>;
51 (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction3<T1, T3, T5, R>;
52 (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
53 (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction2<T3, T5, R>;
54 (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
55 (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
56 (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
57 (t1: __, t2: __, t3: __, t4: __, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
58 (t1: T1, t2: __, t3: __, t4: __, t5: T5): CurriedFunction3<T2, T3, T4, R>;
59 (t1: __, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction3<T1, T3, T4, R>;
60 (t1: __, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction3<T1, T2, T4, R>;
61 (t1: __, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
62 (t1: T1, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction2<T3, T4, R>;
63 (t1: T1, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction2<T2, T4, R>;
64 (t1: T1, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
65 (t1: __, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction2<T1, T4, R>;
66 (t1: __, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
67 (t1: __, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
68 (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction1<T4, R>;
69 (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction1<T3, R>;
70 (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
71 (t1: __, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
72 (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
73}
74/**
75 * Creates a curried function that accepts a single argument.
76 * @param {(t1: T1) => R} func - The function to curry.
77 * @param {number=func.length} arity - The arity of func.
78 * @returns {CurriedFunction1<T1, R>} - Returns the new curried function.
79 * @example
80 * const greet = (name: string) => `Hello ${name}`;
81 * const curriedGreet = curry(greet);
82 * curriedGreet('John'); // => 'Hello John'
83 */
84declare function curry<T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
85/**
86 * Creates a curried function that accepts two arguments.
87 * @param {(t1: T1, t2: T2) => R} func - The function to curry.
88 * @param {number=func.length} arity - The arity of func.
89 * @returns {CurriedFunction2<T1, T2, R>} - Returns the new curried function.
90 * @example
91 * const add = (a: number, b: number) => a + b;
92 * const curriedAdd = curry(add);
93 * curriedAdd(1)(2); // => 3
94 * curriedAdd(1, 2); // => 3
95 */
96declare function curry<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
97/**
98 * Creates a curried function that accepts three arguments.
99 * @param {(t1: T1, t2: T2, t3: T3) => R} func - The function to curry.
100 * @param {number=func.length} arity - The arity of func.
101 * @returns {CurriedFunction3<T1, T2, T3, R>} - Returns the new curried function.
102 * @example
103 * const volume = (l: number, w: number, h: number) => l * w * h;
104 * const curriedVolume = curry(volume);
105 * curriedVolume(2)(3)(4); // => 24
106 * curriedVolume(2, 3)(4); // => 24
107 * curriedVolume(2, 3, 4); // => 24
108 */
109declare function curry<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
110/**
111 * Creates a curried function that accepts four arguments.
112 * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func - The function to curry.
113 * @param {number=func.length} arity - The arity of func.
114 * @returns {CurriedFunction4<T1, T2, T3, T4, R>} - Returns the new curried function.
115 * @example
116 * const fn = (a: number, b: number, c: number, d: number) => a + b + c + d;
117 * const curriedFn = curry(fn);
118 * curriedFn(1)(2)(3)(4); // => 10
119 * curriedFn(1, 2)(3, 4); // => 10
120 * curriedFn(1, 2, 3, 4); // => 10
121 */
122declare function curry<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
123/**
124 * Creates a curried function that accepts five arguments.
125 * @param {(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R} func - The function to curry.
126 * @param {number=func.length} arity - The arity of func.
127 * @returns {CurriedFunction5<T1, T2, T3, T4, T5, R>} - Returns the new curried function.
128 * @example
129 * const fn = (a: number, b: number, c: number, d: number, e: number) => a + b + c + d + e;
130 * const curriedFn = curry(fn);
131 * curriedFn(1)(2)(3)(4)(5); // => 15
132 * curriedFn(1, 2)(3, 4)(5); // => 15
133 * curriedFn(1, 2, 3, 4, 5); // => 15
134 */
135declare function curry<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>;
136/**
137 * Creates a curried function that accepts any number of arguments.
138 * @param {(...args: any[]) => any} func - The function to curry.
139 * @param {number=func.length} arity - The arity of func.
140 * @returns {(...args: any[]) => any} - Returns the new curried function.
141 * @example
142 * const sum = (...args: number[]) => args.reduce((a, b) => a + b, 0);
143 * const curriedSum = curry(sum);
144 * curriedSum(1, 2, 3); // => 6
145 * curriedSum(1)(2, 3); // => 6
146 * curriedSum(1)(2)(3); // => 6
147 */
148declare function curry(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
149declare namespace curry {
150 var placeholder: typeof curryPlaceholder;
151}
152declare const curryPlaceholder: unique symbol;
153
154export { curry };
Note: See TracBrowser for help on using the repository browser.