UNPKG

60.8 kBTypeScriptView Raw
1import _ = require("../index");
2declare module "../index" {
3 interface LoDashStatic {
4 /**
5 * The opposite of _.before; this method creates a function that invokes func once it’s called n or more times.
6 *
7 * @param n The number of calls before func is invoked.
8 * @param func The function to restrict.
9 * @return Returns the new restricted function.
10 */
11 after<TFunc extends (...args: any[]) => any>(n: number, func: TFunc): TFunc;
12 }
13 interface Primitive<T> {
14 /**
15 * @see _.after
16 */
17 after<TFunc extends (...args: any[]) => any>(func: TFunc): Function<TFunc>;
18 }
19 interface PrimitiveChain<T> {
20 /**
21 * @see _.after
22 */
23 after<TFunc extends (...args: any[]) => any>(func: TFunc): FunctionChain<TFunc>;
24 }
25 interface LoDashStatic {
26 /**
27 * Creates a function that accepts up to n arguments ignoring any additional arguments.
28 *
29 * @param func The function to cap arguments for.
30 * @param n The arity cap.
31 * @returns Returns the new function.
32 */
33 ary(func: (...args: any[]) => any, n?: number): (...args: any[]) => any;
34 }
35 interface Function<T> {
36 /**
37 * @see _.ary
38 */
39 ary(n?: number): Function<(...args: any[]) => any>;
40 }
41 interface FunctionChain<T> {
42 /**
43 * @see _.ary
44 */
45 ary(n?: number): FunctionChain<(...args: any[]) => any>;
46 }
47 interface LoDashStatic {
48 /**
49 * Creates a function that invokes func, with the this binding and arguments of the created function, while
50 * it’s called less than n times. Subsequent calls to the created function return the result of the last func
51 * invocation.
52 *
53 * @param n The number of calls at which func is no longer invoked.
54 * @param func The function to restrict.
55 * @return Returns the new restricted function.
56 */
57 before<TFunc extends (...args: any[]) => any>(n: number, func: TFunc): TFunc;
58 }
59 interface Primitive<T> {
60 /**
61 * @see _.before
62 */
63 before<TFunc extends (...args: any[]) => any>(func: TFunc): Function<TFunc>;
64 }
65 interface PrimitiveChain<T> {
66 /**
67 * @see _.before
68 */
69 before<TFunc extends (...args: any[]) => any>(func: TFunc): FunctionChain<TFunc>;
70 }
71 interface FunctionBind {
72 /**
73 * @see _.placeholder
74 */
75 placeholder: __;
76 (func: (...args: any[]) => any, thisArg: any, ...partials: any[]): (...args: any[]) => any;
77 }
78 interface LoDashStatic {
79 /**
80 * Creates a function that invokes func with the this binding of thisArg and prepends any additional _.bind
81 * arguments to those provided to the bound function.
82 *
83 * The _.bind.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder for
84 * partially applied arguments.
85 *
86 * Note: Unlike native Function#bind this method does not set the "length" property of bound functions.
87 *
88 * @param func The function to bind.
89 * @param thisArg The this binding of func.
90 * @param partials The arguments to be partially applied.
91 * @return Returns the new bound function.
92 */
93 bind: FunctionBind;
94 }
95 interface LoDashImplicitWrapper<TValue> {
96 /**
97 * @see _.bind
98 */
99 bind(thisArg: any, ...partials: any[]): Function<(...args: any[]) => any>;
100 }
101 interface LoDashExplicitWrapper<TValue> {
102 /**
103 * @see _.bind
104 */
105 bind(thisArg: any, ...partials: any[]): FunctionChain<(...args: any[]) => any>;
106 }
107 interface FunctionBindKey {
108 placeholder: __;
109 (object: object, key: string, ...partials: any[]): (...args: any[]) => any;
110 }
111 interface LoDashStatic {
112 /**
113 * Creates a function that invokes the method at object[key] and prepends any additional _.bindKey arguments
114 * to those provided to the bound function.
115 *
116 * This method differs from _.bind by allowing bound functions to reference methods that may be redefined
117 * or don’t yet exist. See Peter Michaux’s article for more details.
118 *
119 * The _.bindKey.placeholder value, which defaults to _ in monolithic builds, may be used as a placeholder
120 * for partially applied arguments.
121 *
122 * @param object The object the method belongs to.
123 * @param key The key of the method.
124 * @param partials The arguments to be partially applied.
125 * @return Returns the new bound function.
126 */
127 bindKey: FunctionBindKey;
128 }
129 interface LoDashImplicitWrapper<TValue> {
130 /**
131 * @see _.bindKey
132 */
133 bindKey(key: string, ...partials: any[]): Function<(...args: any[]) => any>;
134 }
135 interface LoDashExplicitWrapper<TValue> {
136 /**
137 * @see _.bindKey
138 */
139 bindKey(key: string, ...partials: any[]): FunctionChain<(...args: any[]) => any>;
140 }
141 interface Curry {
142 <T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
143 <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
144 <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
145 <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
146 <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>;
147 (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
148 placeholder: __;
149 }
150 interface LoDashStatic {
151 curry: Curry;
152 }
153 interface CurriedFunction1<T1, R> {
154 (): CurriedFunction1<T1, R>;
155 (t1: T1): R;
156 }
157 interface CurriedFunction2<T1, T2, R> {
158 (): CurriedFunction2<T1, T2, R>;
159 (t1: T1): CurriedFunction1<T2, R>;
160 (t1: __, t2: T2): CurriedFunction1<T1, R>;
161 (t1: T1, t2: T2): R;
162 }
163 interface CurriedFunction3<T1, T2, T3, R> {
164 (): CurriedFunction3<T1, T2, T3, R>;
165 (t1: T1): CurriedFunction2<T2, T3, R>;
166 (t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
167 (t1: T1, t2: T2): CurriedFunction1<T3, R>;
168 (t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
169 (t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
170 (t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
171 (t1: T1, t2: T2, t3: T3): R;
172 }
173 interface CurriedFunction4<T1, T2, T3, T4, R> {
174 (): CurriedFunction4<T1, T2, T3, T4, R>;
175 (t1: T1): CurriedFunction3<T2, T3, T4, R>;
176 (t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
177 (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
178 (t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
179 (t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
180 (t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
181 (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
182 (t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
183 (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
184 (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
185 (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
186 (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
187 (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
188 (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
189 (t1: T1, t2: T2, t3: T3, t4: T4): R;
190 }
191 interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
192 (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
193 (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
194 (t1: __, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
195 (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
196 (t1: __, t2: __, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
197 (t1: T1, t2: __, t3: T3): CurriedFunction3<T2, T4, T5, R>;
198 (t1: __, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
199 (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
200 (t1: __, t2: __, t3: __, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
201 (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction3<T2, T3, T5, R>;
202 (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction3<T1, T3, T5, R>;
203 (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
204 (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction2<T3, T5, R>;
205 (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
206 (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
207 (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
208 (t1: __, t2: __, t3: __, t4: __, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
209 (t1: T1, t2: __, t3: __, t4: __, t5: T5): CurriedFunction3<T2, T3, T4, R>;
210 (t1: __, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction3<T1, T3, T4, R>;
211 (t1: __, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction3<T1, T2, T4, R>;
212 (t1: __, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
213 (t1: T1, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction2<T3, T4, R>;
214 (t1: T1, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction2<T2, T4, R>;
215 (t1: T1, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
216 (t1: __, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction2<T1, T4, R>;
217 (t1: __, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
218 (t1: __, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
219 (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction1<T4, R>;
220 (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction1<T3, R>;
221 (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
222 (t1: __, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
223 (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
224 }
225 interface RightCurriedFunction1<T1, R> {
226 (): RightCurriedFunction1<T1, R>;
227 (t1: T1): R;
228 }
229 interface RightCurriedFunction2<T1, T2, R> {
230 (): RightCurriedFunction2<T1, T2, R>;
231 (t2: T2): RightCurriedFunction1<T1, R>;
232 (t1: T1, t2: __): RightCurriedFunction1<T2, R>;
233 (t1: T1, t2: T2): R;
234 }
235 interface RightCurriedFunction3<T1, T2, T3, R> {
236 (): RightCurriedFunction3<T1, T2, T3, R>;
237 (t3: T3): RightCurriedFunction2<T1, T2, R>;
238 (t2: T2, t3: __): RightCurriedFunction2<T1, T3, R>;
239 (t2: T2, t3: T3): RightCurriedFunction1<T1, R>;
240 (t1: T1, t2: __, t3: __): RightCurriedFunction2<T2, T3, R>;
241 (t1: T1, t2: T2, t3: __): RightCurriedFunction1<T3, R>;
242 (t1: T1, t2: __, t3: T3): RightCurriedFunction1<T2, R>;
243 (t1: T1, t2: T2, t3: T3): R;
244 }
245 interface RightCurriedFunction4<T1, T2, T3, T4, R> {
246 (): RightCurriedFunction4<T1, T2, T3, T4, R>;
247 (t4: T4): RightCurriedFunction3<T1, T2, T3, R>;
248 (t3: T3, t4: __): RightCurriedFunction3<T1, T2, T4, R>;
249 (t3: T3, t4: T4): RightCurriedFunction2<T1, T2, R>;
250 (t2: T2, t3: __, t4: __): RightCurriedFunction3<T1, T3, T4, R>;
251 (t2: T2, t3: T3, t4: __): RightCurriedFunction2<T1, T4, R>;
252 (t2: T2, t3: __, t4: T4): RightCurriedFunction2<T1, T3, R>;
253 (t2: T2, t3: T3, t4: T4): RightCurriedFunction1<T1, R>;
254 (t1: T1, t2: __, t3: __, t4: __): RightCurriedFunction3<T2, T3, T4, R>;
255 (t1: T1, t2: T2, t3: __, t4: __): RightCurriedFunction2<T3, T4, R>;
256 (t1: T1, t2: __, t3: T3, t4: __): RightCurriedFunction2<T2, T4, R>;
257 (t1: T1, t2: __, t3: __, t4: T4): RightCurriedFunction2<T2, T3, R>;
258 (t1: T1, t2: T2, t3: T3, t4: __): RightCurriedFunction1<T4, R>;
259 (t1: T1, t2: T2, t3: __, t4: T4): RightCurriedFunction1<T3, R>;
260 (t1: T1, t2: __, t3: T3, t4: T4): RightCurriedFunction1<T2, R>;
261 (t1: T1, t2: T2, t3: T3, t4: T4): R;
262 }
263 interface RightCurriedFunction5<T1, T2, T3, T4, T5, R> {
264 (): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
265 (t5: T5): RightCurriedFunction4<T1, T2, T3, T4, R>;
266 (t4: T4, t5: __): RightCurriedFunction4<T1, T2, T3, T5, R>;
267 (t4: T4, t5: T5): RightCurriedFunction3<T1, T2, T3, R>;
268 (t3: T3, t4: __, t5: __): RightCurriedFunction4<T1, T2, T4, T5, R>;
269 (t3: T3, t4: T4, t5: __): RightCurriedFunction3<T1, T2, T5, R>;
270 (t3: T3, t4: __, t5: T5): RightCurriedFunction3<T1, T2, T4, R>;
271 (t3: T3, t4: T4, t5: T5): RightCurriedFunction2<T1, T2, R>;
272 (t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction4<T1, T3, T4, T5, R>;
273 (t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction3<T1, T4, T5, R>;
274 (t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction3<T1, T3, T5, R>;
275 (t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction3<T1, T3, T4, R>;
276 (t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T1, T5, R>;
277 (t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T1, T4, R>;
278 (t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T1, T3, R>;
279 (t2: T2, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T1, R>;
280 (t1: T1, t2: __, t3: __, t4: __, t5: __): RightCurriedFunction4<T2, T3, T4, T5, R>;
281 (t1: T1, t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction3<T3, T4, T5, R>;
282 (t1: T1, t2: __, t3: T3, t4: __, t5: __): RightCurriedFunction3<T2, T4, T5, R>;
283 (t1: T1, t2: __, t3: __, t4: T4, t5: __): RightCurriedFunction3<T2, T3, T5, R>;
284 (t1: T1, t2: __, t3: __, t4: __, t5: T5): RightCurriedFunction3<T2, T3, T4, R>;
285 (t1: T1, t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction2<T4, T5, R>;
286 (t1: T1, t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction2<T3, T5, R>;
287 (t1: T1, t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction2<T3, T4, R>;
288 (t1: T1, t2: __, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T2, T5, R>;
289 (t1: T1, t2: __, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T2, T4, R>;
290 (t1: T1, t2: __, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T2, T3, R>;
291 (t1: T1, t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction1<T5, R>;
292 (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction1<T4, R>;
293 (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction1<T3, R>;
294 (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T2, R>;
295 (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
296 }
297 interface Function<T> {
298 /**
299 * @see _.curry
300 */
301 curry(arity?: number):
302 T extends (arg1: infer T1) => infer R ? Function<CurriedFunction1<T1, R>> :
303 T extends (arg1: infer T1, arg2: infer T2) => infer R ? Function<CurriedFunction2<T1, T2, R>> :
304 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3) => infer R ? Function<CurriedFunction3<T1, T2, T3, R>> :
305 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4) => infer R ? Function<CurriedFunction4<T1, T2, T3, T4, R>> :
306 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4, arg5: infer T5) => infer R ? Function<CurriedFunction5<T1, T2, T3, T4, T5, R>> :
307 Function<(...args: any[]) => any>;
308 }
309 interface FunctionChain<T> {
310 /**
311 * @see _.curry
312 */
313 curry(arity?: number):
314 T extends (arg1: infer T1) => infer R ? FunctionChain<CurriedFunction1<T1, R>> :
315 T extends (arg1: infer T1, arg2: infer T2) => infer R ? FunctionChain<CurriedFunction2<T1, T2, R>> :
316 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3) => infer R ? FunctionChain<CurriedFunction3<T1, T2, T3, R>> :
317 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4) => infer R ? FunctionChain<CurriedFunction4<T1, T2, T3, T4, R>> :
318 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4, arg5: infer T5) => infer R ? FunctionChain<CurriedFunction5<T1, T2, T3, T4, T5, R>> :
319 FunctionChain<(...args: any[]) => any>;
320 }
321 interface CurryRight {
322 <T1, R>(func: (t1: T1) => R, arity?: number): RightCurriedFunction1<T1, R>;
323 <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): RightCurriedFunction2<T1, T2, R>;
324 <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): RightCurriedFunction3<T1, T2, T3, R>;
325 <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): RightCurriedFunction4<T1, T2, T3, T4, R>;
326 <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
327 (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
328 placeholder: __;
329 }
330 interface LoDashStatic {
331 curryRight: CurryRight;
332 }
333 interface Function<T> {
334 /**
335 * @see _.curryRight
336 */
337 curryRight(arity?: number):
338 T extends (arg1: infer T1) => infer R ? Function<RightCurriedFunction1<T1, R>> :
339 T extends (arg1: infer T1, arg2: infer T2) => infer R ? Function<RightCurriedFunction2<T1, T2, R>> :
340 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3) => infer R ? Function<RightCurriedFunction3<T1, T2, T3, R>> :
341 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4) => infer R ? Function<RightCurriedFunction4<T1, T2, T3, T4, R>> :
342 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4, arg5: infer T5) => infer R ? Function<RightCurriedFunction5<T1, T2, T3, T4, T5, R>> :
343 Function<(...args: any[]) => any>;
344 }
345 interface FunctionChain<T> {
346 /**
347 * @see _.curryRight
348 */
349 curryRight(arity?: number):
350 T extends (arg1: infer T1) => infer R ? FunctionChain<RightCurriedFunction1<T1, R>> :
351 T extends (arg1: infer T1, arg2: infer T2) => infer R ? FunctionChain<RightCurriedFunction2<T1, T2, R>> :
352 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3) => infer R ? FunctionChain<RightCurriedFunction3<T1, T2, T3, R>> :
353 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4) => infer R ? FunctionChain<RightCurriedFunction4<T1, T2, T3, T4, R>> :
354 T extends (arg1: infer T1, arg2: infer T2, arg3: infer T3, arg4: infer T4, arg5: infer T5) => infer R ? FunctionChain<RightCurriedFunction5<T1, T2, T3, T4, T5, R>> :
355 FunctionChain<(...args: any[]) => any>;
356 }
357 interface DebounceSettings {
358 /**
359 * @see _.leading
360 */
361 leading?: boolean;
362 /**
363 * @see _.maxWait
364 */
365 maxWait?: number;
366 /**
367 * @see _.trailing
368 */
369 trailing?: boolean;
370 }
371 interface LoDashStatic {
372 /**
373 * Creates a debounced function that delays invoking func until after wait milliseconds have elapsed since
374 * the last time the debounced function was invoked. The debounced function comes with a cancel method to
375 * cancel delayed invocations and a flush method to immediately invoke them. Provide an options object to
376 * indicate that func should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent
377 * calls to the debounced function return the result of the last func invocation.
378 *
379 * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only
380 * if the the debounced function is invoked more than once during the wait timeout.
381 *
382 * See David Corbacho’s article for details over the differences between _.debounce and _.throttle.
383 *
384 * @param func The function to debounce.
385 * @param wait The number of milliseconds to delay.
386 * @param options The options object.
387 * @param options.leading Specify invoking on the leading edge of the timeout.
388 * @param options.maxWait The maximum time func is allowed to be delayed before it’s invoked.
389 * @param options.trailing Specify invoking on the trailing edge of the timeout.
390 * @return Returns the new debounced function.
391 */
392 debounce<T extends (...args: any) => any>(func: T, wait?: number, options?: DebounceSettings): T & Cancelable;
393 }
394 interface Function<T extends (...args: any) => any> {
395 /**
396 * @see _.debounce
397 */
398 debounce(wait?: number, options?: DebounceSettings): Function<T & Cancelable>;
399 }
400 interface FunctionChain<T extends (...args: any) => any> {
401 /**
402 * @see _.debounce
403 */
404 debounce(wait?: number, options?: DebounceSettings): FunctionChain<T & Cancelable>;
405 }
406 interface LoDashStatic {
407 /**
408 * Defers invoking the func until the current call stack has cleared. Any additional arguments are provided to
409 * func when it’s invoked.
410 *
411 * @param func The function to defer.
412 * @param args The arguments to invoke the function with.
413 * @return Returns the timer id.
414 */
415 defer(func: (...args: any[]) => any, ...args: any[]): number;
416 }
417 interface LoDashImplicitWrapper<TValue> {
418 /**
419 * @see _.defer
420 */
421 defer(...args: any[]): Primitive<number>;
422 }
423 interface LoDashExplicitWrapper<TValue> {
424 /**
425 * @see _.defer
426 */
427 defer(...args: any[]): PrimitiveChain<number>;
428 }
429 interface LoDashStatic {
430 /**
431 * Invokes func after wait milliseconds. Any additional arguments are provided to func when it’s invoked.
432 *
433 * @param func The function to delay.
434 * @param wait The number of milliseconds to delay invocation.
435 * @param args The arguments to invoke the function with.
436 * @return Returns the timer id.
437 */
438 delay(func: (...args: any[]) => any, wait: number, ...args: any[]): number;
439 }
440 interface LoDashImplicitWrapper<TValue> {
441 /**
442 * @see _.delay
443 */
444 delay(wait: number, ...args: any[]): Primitive<number>;
445 }
446 interface LoDashExplicitWrapper<TValue> {
447 /**
448 * @see _.delay
449 */
450 delay(wait: number, ...args: any[]): PrimitiveChain<number>;
451 }
452 interface LoDashStatic {
453 /**
454 * Creates a function that invokes `func` with arguments reversed.
455 *
456 * @category Function
457 * @param func The function to flip arguments for.
458 * @returns Returns the new function.
459 * @example
460 *
461 * var flipped = _.flip(function() {
462 * return _.toArray(arguments);
463 * });
464 *
465 * flipped('a', 'b', 'c', 'd');
466 * // => ['d', 'c', 'b', 'a']
467 */
468 flip<T extends (...args: any) => any>(func: T): T;
469 }
470 interface Function<T extends (...args: any) => any> {
471 /**
472 * @see _.flip
473 */
474 flip(): this;
475 }
476 interface FunctionChain<T extends (...args: any) => any> {
477 /**
478 * @see _.flip
479 */
480 flip(): this;
481 }
482 interface MemoizedFunction {
483 /**
484 * @see _.cache
485 */
486 cache: MapCache;
487 }
488 interface LoDashStatic {
489 /**
490 * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for
491 * storing the result based on the arguments provided to the memoized function. By default, the first argument
492 * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with
493 * the this binding of the memoized function.
494 *
495 * @param func The function to have its output memoized.
496 * @param resolver The function to resolve the cache key.
497 * @return Returns the new memoizing function.
498 */
499 memoize: {
500 <T extends (...args: any) => any>(func: T, resolver?: (...args: any[]) => any): T & MemoizedFunction;
501 Cache: MapCacheConstructor;
502 };
503 }
504 interface Function<T extends (...args: any) => any> {
505 /**
506 * @see _.memoize
507 */
508 memoize(resolver?: (...args: any[]) => any): Function<T & MemoizedFunction>;
509 }
510 interface FunctionChain<T extends (...args: any) => any> {
511 /**
512 * @see _.memoize
513 */
514 memoize(resolver?: (...args: any[]) => any): FunctionChain<T & MemoizedFunction>;
515 }
516 interface LoDashStatic {
517 /**
518 * Creates a function that negates the result of the predicate func. The func predicate is invoked with
519 * the this binding and arguments of the created function.
520 *
521 * @param predicate The predicate to negate.
522 * @return Returns the new function.
523 */
524 negate<T extends any[]>(predicate: (...args: T) => any): (...args: T) => boolean;
525 }
526 interface Function<T extends (...args: any) => any> {
527 /**
528 * @see _.negate
529 */
530 negate(): Function<(...args: Parameters<T>) => boolean>;
531 }
532 interface FunctionChain<T extends (...args: any) => any> {
533 /**
534 * @see _.negate
535 */
536 negate(): FunctionChain<(...args: Parameters<T>) => boolean>;
537 }
538 interface LoDashStatic {
539 /**
540 * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value
541 * of the first call. The func is invoked with the this binding and arguments of the created function.
542 *
543 * @param func The function to restrict.
544 * @return Returns the new restricted function.
545 */
546 once<T extends (...args: any) => any>(func: T): T;
547 }
548 interface Function<T extends (...args: any) => any> {
549 /**
550 * @see _.once
551 */
552 once(): Function<T>;
553 }
554 interface FunctionChain<T extends (...args: any) => any> {
555 /**
556 * @see _.once
557 */
558 once(): FunctionChain<T>;
559 }
560 interface LoDashStatic {
561 /**
562 * Creates a function that runs each argument through a corresponding transform function.
563 *
564 * @param func The function to wrap.
565 * @param transforms The functions to transform arguments, specified as individual functions or arrays
566 * of functions.
567 * @return Returns the new function.
568 */
569 overArgs(func: (...args: any[]) => any, ...transforms: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
570 }
571 interface Function<T> {
572 /**
573 * @see _.overArgs
574 */
575 overArgs(...transforms: Array<Many<(...args: any[]) => any>>): Function<(...args: any[]) => any>;
576 }
577 interface FunctionChain<T> {
578 /**
579 * @see _.overArgs
580 */
581 overArgs(...transforms: Array<Many<(...args: any[]) => any>>): FunctionChain<(...args: any[]) => any>;
582 }
583 interface LoDashStatic {
584 /**
585 * Creates a function that, when called, invokes func with any additional partial arguments
586 * prepended to those provided to the new function. This method is similar to _.bind except
587 * it does not alter the this binding.
588 * @param func The function to partially apply arguments to.
589 * @param args Arguments to be partially applied.
590 * @return The new partially applied function.
591 */
592 partial: Partial;
593 }
594 type __ = LoDashStatic;
595 type Function0<R> = () => R;
596 type Function1<T1, R> = (t1: T1) => R;
597 type Function2<T1, T2, R> = (t1: T1, t2: T2) => R;
598 type Function3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;
599 type Function4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;
600 interface Partial {
601 <T1, T2, R>(func: Function2<T1, T2, R>, plc1: __, arg2: T2): Function1<T1, R>;
602 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2): Function2<T1, T3, R>;
603 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, plc2: __, arg3: T3): Function2<T1, T2, R>;
604 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3): Function1<T2, R>;
605 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2, arg3: T3): Function1<T1, R>;
606 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2): Function3<T1, T3, T4, R>;
607 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3): Function3<T1, T2, T4, R>;
608 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3): Function2<T2, T4, R>;
609 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3): Function2<T1, T4, R>;
610 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3): Function1<T4, R>;
611 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, plc3: __, arg4: T4): Function3<T1, T2, T3, R>;
612 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4): Function2<T2, T3, R>;
613 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, plc3: __, arg4: T4): Function2<T1, T3, R>;
614 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4): Function1<T3, R>;
615 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3, arg4: T4): Function2<T1, T2, R>;
616 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4): Function1<T2, R>;
617 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;
618 <TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;
619 <TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;
620 <TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;
621 <TS extends any[], T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3, ...ts: TS) => R, t1: T1, t2: T2, t3: T3): (...ts: TS) => R;
622 <TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: TS) => R, t1: T1, t2: T2, t3: T3, t4: T4): (...ts: TS) => R;
623 placeholder: __;
624 }
625 interface Function<T> {
626 /**
627 * @see _.partial
628 */
629 partial<T2>(plc1: __, arg2: T2): Function<
630 T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> :
631 T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
632 T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
633 any
634 >;
635 /**
636 * @see _.partial
637 */
638 partial<T3>(plc1: __, plc2: __, arg3: T3): Function<
639 T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
640 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
641 any
642 >;
643 /**
644 * @see _.partial
645 */
646 partial<T1, T3>(arg1: T1, plc2: __, arg3: T3): Function<
647 T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
648 T extends Function4<T1, infer T2, T3, infer T4, infer R> ? Function2<T2, T4, R> :
649 any
650 >;
651 /**
652 * @see _.partial
653 */
654 partial<T2, T3>(plc1: __, arg2: T2, arg3: T3): Function<
655 T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
656 T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
657 any
658 >;
659 /**
660 * @see _.partial
661 */
662 partial<T3>(plc1: __, plc2: __, arg3: T3): Function<
663 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
664 any
665 >;
666 /**
667 * @see _.partial
668 */
669 partial<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): Function<
670 T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
671 any
672 >;
673 /**
674 * @see _.partial
675 */
676 partial<T2, T4>(plc1: __, arg2: T2, plc3: __, arg4: T4): Function<
677 T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
678 any
679 >;
680 /**
681 * @see _.partial
682 */
683 partial<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): Function<
684 T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
685 any
686 >;
687 /**
688 * @see _.partial
689 */
690 partial<T3, T4>(plc1: __, plc2: __, arg3: T3, arg4: T4): Function<
691 T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
692 any
693 >;
694 /**
695 * @see _.partial
696 */
697 partial<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): Function<
698 T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
699 any
700 >;
701 /**
702 * @see _.partial
703 */
704 partial<T2, T3, T4>(plc1: __, arg2: T2, arg3: T3, arg4: T4): Function<
705 T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
706 any
707 >;
708 /**
709 * @see _.partial
710 */
711 partial<T1, T2, T3, T4>(arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function<
712 T extends (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: infer TS) => infer R ? (...ts: TS) => R :
713 any
714 >;
715 /**
716 * @see _.partial
717 */
718 partial<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): Function<
719 T extends (t1: T1, t2: T2, t3: T3, ...ts: infer TS) => infer R ? (...ts: TS) => R :
720 any
721 >;
722 /**
723 * @see _.partial
724 */
725 partial<T1, T2>(arg1: T1, arg2: T2): Function<
726 T extends (t1: T1, t2: T2, ...ts: infer TS) => infer R ? (...ts: TS) => R :
727 any
728 >;
729 /**
730 * @see _.partial
731 */
732 partial<T1>(arg1: T1): Function<
733 T extends (t1: T1, ...ts: infer TS) => infer R ? (...ts: TS) => R :
734 any
735 >;
736 /**
737 * @see _.partial
738 */
739 partial(): Function<T extends (...ts: any[]) => any ? T : any>;
740 }
741 interface FunctionChain<T> {
742 /**
743 * @see _.partial
744 */
745 partial<T2>(plc1: __, arg2: T2): FunctionChain<
746 T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> :
747 T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
748 T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
749 any
750 >;
751 /**
752 * @see _.partial
753 */
754 partial<T3>(plc1: __, plc2: __, arg3: T3): FunctionChain<
755 T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
756 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
757 any
758 >;
759 /**
760 * @see _.partial
761 */
762 partial<T1, T3>(arg1: T1, plc2: __, arg3: T3): FunctionChain<
763 T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
764 T extends Function4<T1, infer T2, T3, infer T4, infer R> ? Function2<T2, T4, R> :
765 any
766 >;
767 /**
768 * @see _.partial
769 */
770 partial<T2, T3>(plc1: __, arg2: T2, arg3: T3): FunctionChain<
771 T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
772 T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
773 any
774 >;
775 /**
776 * @see _.partial
777 */
778 partial<T3>(plc1: __, plc2: __, arg3: T3): FunctionChain<
779 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
780 any
781 >;
782 /**
783 * @see _.partial
784 */
785 partial<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): FunctionChain<
786 T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
787 any
788 >;
789 /**
790 * @see _.partial
791 */
792 partial<T2, T4>(plc1: __, arg2: T2, plc3: __, arg4: T4): FunctionChain<
793 T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
794 any
795 >;
796 /**
797 * @see _.partial
798 */
799 partial<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): FunctionChain<
800 T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
801 any
802 >;
803 /**
804 * @see _.partial
805 */
806 partial<T3, T4>(plc1: __, plc2: __, arg3: T3, arg4: T4): FunctionChain<
807 T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
808 any
809 >;
810 /**
811 * @see _.partial
812 */
813 partial<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): FunctionChain<
814 T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
815 any
816 >;
817 /**
818 * @see _.partial
819 */
820 partial<T2, T3, T4>(plc1: __, arg2: T2, arg3: T3, arg4: T4): FunctionChain<
821 T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
822 any
823 >;
824 /**
825 * @see _.partial
826 */
827 partial<T1, T2, T3, T4>(arg1: T1, arg2: T2, arg3: T3, arg4: T4): FunctionChain<
828 T extends (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: infer TS) => infer R ? (...ts: TS) => R :
829 any
830 >;
831 /**
832 * @see _.partial
833 */
834 partial<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): FunctionChain<
835 T extends (t1: T1, t2: T2, t3: T3, ...ts: infer TS) => infer R ? (...ts: TS) => R :
836 any
837 >;
838 /**
839 * @see _.partial
840 */
841 partial<T1, T2>(arg1: T1, arg2: T2): FunctionChain<
842 T extends (t1: T1, t2: T2, ...ts: infer TS) => infer R ? (...ts: TS) => R :
843 any
844 >;
845 /**
846 * @see _.partial
847 */
848 partial<T1>(arg1: T1): FunctionChain<
849 T extends (t1: T1, ...ts: infer TS) => infer R ? (...ts: TS) => R :
850 any
851 >;
852 /**
853 * @see _.partial
854 */
855 partial(): FunctionChain<T extends (...ts: any[]) => any ? T : any>;
856 }
857 interface LoDashStatic {
858 /**
859 * This method is like _.partial except that partial arguments are appended to those provided
860 * to the new function.
861 * @param func The function to partially apply arguments to.
862 * @param args Arguments to be partially applied.
863 * @return The new partially applied function.
864 */
865 partialRight: PartialRight;
866 }
867 interface PartialRight {
868 <R>(func: Function0<R>): Function0<R>;
869 <T1, R>(func: Function1<T1, R>): Function1<T1, R>;
870 <T1, R>(func: Function1<T1, R>, arg1: T1): Function0<R>;
871 <T1, T2, R>(func: Function2<T1, T2, R>): Function2<T1, T2, R>;
872 <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, plc2: __): Function1<T2, R>;
873 <T1, T2, R>(func: Function2<T1, T2, R>, arg2: T2): Function1<T1, R>;
874 <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2): Function0<R>;
875 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>): Function3<T1, T2, T3, R>;
876 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, plc3: __): Function2<T2, T3, R>;
877 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg2: T2, plc3: __): Function2<T1, T3, R>;
878 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, plc3: __): Function1<T3, R>;
879 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg3: T3): Function2<T1, T2, R>;
880 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3): Function1<T2, R>;
881 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg2: T2, arg3: T3): Function1<T1, R>;
882 <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3): Function0<R>;
883 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>): Function4<T1, T2, T3, T4, R>;
884 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, plc4: __): Function3<T2, T3, T4, R>;
885 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, plc3: __, plc4: __): Function3<T1, T3, T4, R>;
886 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, plc4: __): Function2<T3, T4, R>;
887 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg3: T3, plc4: __): Function3<T1, T2, T4, R>;
888 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, plc4: __): Function2<T2, T4, R>;
889 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, arg3: T3, plc4: __): Function2<T1, T4, R>;
890 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, plc4: __): Function1<T4, R>;
891 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg4: T4): Function3<T1, T2, T3, R>;
892 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4): Function2<T2, T3, R>;
893 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, plc3: __, arg4: T4): Function2<T1, T3, R>;
894 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4): Function1<T3, R>;
895 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg3: T3, arg4: T4): Function2<T1, T2, R>;
896 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4): Function1<T2, R>;
897 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;
898 <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0<R>;
899 (func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
900 placeholder: __;
901 }
902 interface Function<T> {
903 /**
904 * @see _.partialRight
905 */
906 partialRight<T1>(arg1: T1, plc2: __): Function<
907 T extends Function2<T1, infer T2, infer R> ? Function1<T2, R> :
908 any
909 >;
910 /**
911 * @see _.partialRight
912 */
913 partialRight<T2>(arg2: T2): Function<
914 T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> : any
915 >;
916 /**
917 * @see _.partialRight
918 */
919 partialRight<T1>(arg1: T1, plc2: __, plc3: __): Function<
920 T extends Function3<T1, infer T2, infer T3, infer R> ? Function2<T2, T3, R> :
921 any
922 >;
923 /**
924 * @see _.partialRight
925 */
926 partialRight<T2>(arg2: T2, plc3: __): Function<
927 T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
928 any
929 >;
930 /**
931 * @see _.partialRight
932 */
933 partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __): Function<
934 T extends Function3<T1, T2, infer T3, infer R> ? Function1<T3, R> :
935 any
936 >;
937 /**
938 * @see _.partialRight
939 */
940 partialRight<T3>(arg3: T3): Function<
941 T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
942 any
943 >;
944 /**
945 * @see _.partialRight
946 */
947 partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3): Function<
948 T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
949 any
950 >;
951 /**
952 * @see _.partialRight
953 */
954 partialRight<T2, T3>(arg2: T2, arg3: T3): Function<
955 T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
956 any
957 >;
958 /**
959 * @see _.partialRight
960 */
961 partialRight<T1>(arg1: T1, plc2: __, plc3: __, plc4: __): Function<
962 T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function3<T2, T3, T4, R> :
963 any
964 >;
965 /**
966 * @see _.partialRight
967 */
968 partialRight<T2>(arg2: T2, plc3: __, plc4: __): Function<
969 T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
970 any
971 >;
972 /**
973 * @see _.partialRight
974 */
975 partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __, plc4: __): Function<
976 T extends Function4<T1, T2, infer T3, infer T4, infer R> ? Function2<T3, T4, R> :
977 any
978 >;
979 /**
980 * @see _.partialRight
981 */
982 partialRight<T3>(arg3: T3, plc4: __): Function<
983 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
984 any
985 >;
986 /**
987 * @see _.partialRight
988 */
989 partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3, plc4: __): Function<
990 T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function2<T2, T4, R> :
991 any
992 >;
993 /**
994 * @see _.partialRight
995 */
996 partialRight<T2, T3>(arg2: T2, arg3: T3, plc4: __): Function<
997 T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
998 any
999 >;
1000 /**
1001 * @see _.partialRight
1002 */
1003 partialRight<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3, plc4: __): Function<
1004 T extends Function4<T1, T2, T3, infer T4, infer R> ? Function1<T4, R> :
1005 any
1006 >;
1007 /**
1008 * @see _.partialRight
1009 */
1010 partialRight<T4>(arg4: T4): Function<
1011 T extends Function4<infer T1, infer T2, infer T3, T4, infer R> ? Function3<T1, T2, T3, R> :
1012 any
1013 >;
1014 /**
1015 * @see _.partialRight
1016 */
1017 partialRight<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): Function<
1018 T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
1019 any
1020 >;
1021 /**
1022 * @see _.partialRight
1023 */
1024 partialRight<T2, T4>(arg2: T2, plc3: __, arg4: T4): Function<
1025 T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
1026 any
1027 >;
1028 /**
1029 * @see _.partialRight
1030 */
1031 partialRight<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): Function<
1032 T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
1033 any
1034 >;
1035 /**
1036 * @see _.partialRight
1037 */
1038 partialRight<T3, T4>(arg3: T3, arg4: T4): Function<
1039 T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
1040 any
1041 >;
1042 /**
1043 * @see _.partialRight
1044 */
1045 partialRight<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): Function<
1046 T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
1047 any
1048 >;
1049 /**
1050 * @see _.partialRight
1051 */
1052 partialRight<T2, T3, T4>(arg2: T2, arg3: T3, arg4: T4): Function<
1053 T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
1054 any
1055 >;
1056 /**
1057 * @see _.partialRight
1058 */
1059 partialRight<TS extends any[]>(...ts: TS): Function<T extends (...args: TS) => infer R ? () => R : any>;
1060 /**
1061 * @see _.partialRight
1062 */
1063 partialRight(): Function<T extends (...ts: any[]) => any ? T : any>;
1064 }
1065 interface FunctionChain<T> {
1066 /**
1067 * @see _.partialRight
1068 */
1069 partialRight<T1>(arg1: T1, plc2: __): FunctionChain<
1070 T extends Function2<T1, infer T2, infer R> ? Function1<T2, R> :
1071 any
1072 >;
1073 /**
1074 * @see _.partialRight
1075 */
1076 partialRight<T2>(arg2: T2): FunctionChain<
1077 T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> : any
1078 >;
1079 /**
1080 * @see _.partialRight
1081 */
1082 partialRight<T1>(arg1: T1, plc2: __, plc3: __): FunctionChain<
1083 T extends Function3<T1, infer T2, infer T3, infer R> ? Function2<T2, T3, R> :
1084 any
1085 >;
1086 /**
1087 * @see _.partialRight
1088 */
1089 partialRight<T2>(arg2: T2, plc3: __): FunctionChain<
1090 T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
1091 any
1092 >;
1093 /**
1094 * @see _.partialRight
1095 */
1096 partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __): FunctionChain<
1097 T extends Function3<T1, T2, infer T3, infer R> ? Function1<T3, R> :
1098 any
1099 >;
1100 /**
1101 * @see _.partialRight
1102 */
1103 partialRight<T3>(arg3: T3): FunctionChain<
1104 T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
1105 any
1106 >;
1107 /**
1108 * @see _.partialRight
1109 */
1110 partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3): FunctionChain<
1111 T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
1112 any
1113 >;
1114 /**
1115 * @see _.partialRight
1116 */
1117 partialRight<T2, T3>(arg2: T2, arg3: T3): FunctionChain<
1118 T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
1119 any
1120 >;
1121 /**
1122 * @see _.partialRight
1123 */
1124 partialRight<T1>(arg1: T1, plc2: __, plc3: __, plc4: __): FunctionChain<
1125 T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function3<T2, T3, T4, R> :
1126 any
1127 >;
1128 /**
1129 * @see _.partialRight
1130 */
1131 partialRight<T2>(arg2: T2, plc3: __, plc4: __): FunctionChain<
1132 T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
1133 any
1134 >;
1135 /**
1136 * @see _.partialRight
1137 */
1138 partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __, plc4: __): FunctionChain<
1139 T extends Function4<T1, T2, infer T3, infer T4, infer R> ? Function2<T3, T4, R> :
1140 any
1141 >;
1142 /**
1143 * @see _.partialRight
1144 */
1145 partialRight<T3>(arg3: T3, plc4: __): FunctionChain<
1146 T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
1147 any
1148 >;
1149 /**
1150 * @see _.partialRight
1151 */
1152 partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3, plc4: __): FunctionChain<
1153 T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function2<T2, T4, R> :
1154 any
1155 >;
1156 /**
1157 * @see _.partialRight
1158 */
1159 partialRight<T2, T3>(arg2: T2, arg3: T3, plc4: __): FunctionChain<
1160 T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
1161 any
1162 >;
1163 /**
1164 * @see _.partialRight
1165 */
1166 partialRight<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3, plc4: __): FunctionChain<
1167 T extends Function4<T1, T2, T3, infer T4, infer R> ? Function1<T4, R> :
1168 any
1169 >;
1170 /**
1171 * @see _.partialRight
1172 */
1173 partialRight<T4>(arg4: T4): FunctionChain<
1174 T extends Function4<infer T1, infer T2, infer T3, T4, infer R> ? Function3<T1, T2, T3, R> :
1175 any
1176 >;
1177 /**
1178 * @see _.partialRight
1179 */
1180 partialRight<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): FunctionChain<
1181 T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
1182 any
1183 >;
1184 /**
1185 * @see _.partialRight
1186 */
1187 partialRight<T2, T4>(arg2: T2, plc3: __, arg4: T4): FunctionChain<
1188 T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
1189 any
1190 >;
1191 /**
1192 * @see _.partialRight
1193 */
1194 partialRight<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): FunctionChain<
1195 T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
1196 any
1197 >;
1198 /**
1199 * @see _.partialRight
1200 */
1201 partialRight<T3, T4>(arg3: T3, arg4: T4): FunctionChain<
1202 T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
1203 any
1204 >;
1205 /**
1206 * @see _.partialRight
1207 */
1208 partialRight<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): FunctionChain<
1209 T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
1210 any
1211 >;
1212 /**
1213 * @see _.partialRight
1214 */
1215 partialRight<T2, T3, T4>(arg2: T2, arg3: T3, arg4: T4): FunctionChain<
1216 T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
1217 any
1218 >;
1219 /**
1220 * @see _.partialRight
1221 */
1222 partialRight<TS extends any[]>(...ts: TS): FunctionChain<T extends (...args: TS) => infer R ? () => R : any>;
1223 /**
1224 * @see _.partialRight
1225 */
1226 partialRight(): FunctionChain<T extends (...ts: any[]) => any ? T : any>;
1227 }
1228 interface LoDashStatic {
1229 /**
1230 * Creates a function that invokes func with arguments arranged according to the specified indexes where the
1231 * argument value at the first index is provided as the first argument, the argument value at the second index
1232 * is provided as the second argument, and so on.
1233 * @param func The function to rearrange arguments for.
1234 * @param indexes The arranged argument indexes, specified as individual indexes or arrays of indexes.
1235 * @return Returns the new function.
1236 */
1237 rearg(func: (...args: any[]) => any, ...indexes: Array<Many<number>>): (...args: any[]) => any;
1238 }
1239 interface Function<T> {
1240 /**
1241 * @see _.rearg
1242 */
1243 rearg(...indexes: Array<Many<number>>): Function<(...args: any[]) => any>;
1244 }
1245 interface FunctionChain<T> {
1246 /**
1247 * @see _.rearg
1248 */
1249 rearg(...indexes: Array<Many<number>>): FunctionChain<(...args: any[]) => any>;
1250 }
1251 interface LoDashStatic {
1252 /**
1253 * Creates a function that invokes func with the this binding of the created function and arguments from start
1254 * and beyond provided as an array.
1255 *
1256 * Note: This method is based on the rest parameter.
1257 *
1258 * @param func The function to apply a rest parameter to.
1259 * @param start The start position of the rest parameter.
1260 * @return Returns the new function.
1261 */
1262 rest(func: (...args: any[]) => any, start?: number): (...args: any[]) => any;
1263 }
1264 interface Function<T extends (...args: any) => any> {
1265 /**
1266 * @see _.rest
1267 */
1268 rest(start?: number): Function<(...args: any[]) => any>;
1269 }
1270 interface FunctionChain<T extends (...args: any) => any> {
1271 /**
1272 * @see _.rest
1273 */
1274 rest(start?: number): FunctionChain<(...args: any[]) => any>;
1275 }
1276 interface LoDashStatic {
1277 /**
1278 * Creates a function that invokes func with the this binding of the created function and an array of arguments
1279 * much like Function#apply.
1280 *
1281 * Note: This method is based on the spread operator.
1282 *
1283 * @param func The function to spread arguments over.
1284 * @return Returns the new function.
1285 */
1286 spread<TResult>(func: (...args: any[]) => TResult, start?: number): (...args: any[]) => TResult;
1287 }
1288 interface Function<T> {
1289 /**
1290 * @see _.spread
1291 */
1292 spread(start?: number): Function<(...args: any[]) => ReturnType<T>>;
1293 }
1294 interface FunctionChain<T> {
1295 /**
1296 * @see _.spread
1297 */
1298 spread(start?: number): FunctionChain<(...args: any[]) => ReturnType<T>>;
1299 }
1300 interface ThrottleSettings {
1301 /**
1302 * @see _.leading
1303 */
1304 leading?: boolean;
1305 /**
1306 * @see _.trailing
1307 */
1308 trailing?: boolean;
1309 }
1310 interface LoDashStatic {
1311 /**
1312 * Creates a throttled function that only invokes func at most once per every wait milliseconds. The throttled
1313 * function comes with a cancel method to cancel delayed invocations and a flush method to immediately invoke
1314 * them. Provide an options object to indicate that func should be invoked on the leading and/or trailing edge
1315 * of the wait timeout. Subsequent calls to the throttled function return the result of the last func call.
1316 *
1317 * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only if
1318 * the the throttled function is invoked more than once during the wait timeout.
1319 *
1320 * @param func The function to throttle.
1321 * @param wait The number of milliseconds to throttle invocations to.
1322 * @param options The options object.
1323 * @param options.leading Specify invoking on the leading edge of the timeout.
1324 * @param options.trailing Specify invoking on the trailing edge of the timeout.
1325 * @return Returns the new throttled function.
1326 */
1327 throttle<T extends (...args: any) => any>(func: T, wait?: number, options?: ThrottleSettings): T & Cancelable;
1328 }
1329 interface Function<T extends (...args: any) => any> {
1330 /**
1331 * @see _.throttle
1332 */
1333 throttle(wait?: number, options?: ThrottleSettings): Function<T & Cancelable>;
1334 }
1335 interface FunctionChain<T extends (...args: any) => any> {
1336 /**
1337 * @see _.throttle
1338 */
1339 throttle(wait?: number, options?: ThrottleSettings): FunctionChain<T & Cancelable>;
1340 }
1341 interface LoDashStatic {
1342 /**
1343 * Creates a function that accepts up to one argument, ignoring any
1344 * additional arguments.
1345 *
1346 * @category Function
1347 * @param func The function to cap arguments for.
1348 * @returns Returns the new function.
1349 * @example
1350 *
1351 * _.map(['6', '8', '10'], _.unary(parseInt));
1352 * // => [6, 8, 10]
1353 */
1354 unary<T, TResult>(func: (arg1: T, ...args: any[]) => TResult): (arg1: T) => TResult;
1355 }
1356 interface Function<T> {
1357 /**
1358 * @see _.unary
1359 */
1360 unary(): Function<(arg1: Parameters<T>['0']) => ReturnType<T>>;
1361 }
1362 interface FunctionChain<T> {
1363 /**
1364 * @see _.unary
1365 */
1366 unary(): FunctionChain<(arg1: Parameters<T>['0']) => ReturnType<T>>;
1367 }
1368 interface LoDashStatic {
1369 /**
1370 * Creates a function that provides value to the wrapper function as its first argument. Any additional
1371 * arguments provided to the function are appended to those provided to the wrapper function. The wrapper is
1372 * invoked with the this binding of the created function.
1373 *
1374 * @param value The value to wrap.
1375 * @param wrapper The wrapper function.
1376 * @return Returns the new function.
1377 */
1378 wrap<T, TArgs, TResult>(value: T, wrapper: (value: T, ...args: TArgs[]) => TResult): (...args: TArgs[]) => TResult;
1379 }
1380 interface LoDashImplicitWrapper<TValue> {
1381 /**
1382 * @see _.wrap
1383 */
1384 wrap<TArgs, TResult>(wrapper: (value: TValue, ...args: TArgs[]) => TResult): Function<(...args: TArgs[]) => TResult>;
1385 }
1386 interface LoDashExplicitWrapper<TValue> {
1387 /**
1388 * @see _.wrap
1389 */
1390 wrap<TArgs, TResult>(wrapper: (value: TValue, ...args: TArgs[]) => TResult): FunctionChain<(...args: TArgs[]) => TResult>;
1391 }
1392}