2fd09a65229cd2dbe2425c357867027df9e1d69b2e8fb411c22a28dcb7c6a442d197a88836199bc54698ac7c8733600ffbf13c77ea9550b56d16f55b1033e0 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455
  1. import _ = require("../index");
  2. declare 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 extends (...args: any) => any> {
  36. /**
  37. * @see _.ary
  38. */
  39. ary(n?: number): Function<(...args: any[]) => any>;
  40. }
  41. interface FunctionChain<T extends (...args: any) => any> {
  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 extends (...args: any) => any> {
  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 extends (...args: any) => any> {
  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 extends (...args: any) => any> {
  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 extends (...args: any) => any> {
  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 | undefined;
  362. /**
  363. * @see _.maxWait
  364. */
  365. maxWait?: number | undefined;
  366. /**
  367. * @see _.trailing
  368. */
  369. trailing?: boolean | undefined;
  370. }
  371. interface DebounceSettingsLeading extends DebounceSettings {
  372. leading: true;
  373. }
  374. interface DebouncedFunc<T extends (...args: any[]) => any> {
  375. /**
  376. * Call the original function, but applying the debounce rules.
  377. *
  378. * If the debounced function can be run immediately, this calls it and returns its return
  379. * value.
  380. *
  381. * Otherwise, it returns the return value of the last invocation, or undefined if the debounced
  382. * function was not invoked yet.
  383. */
  384. (...args: Parameters<T>): ReturnType<T> | undefined;
  385. /**
  386. * Throw away any pending invocation of the debounced function.
  387. */
  388. cancel(): void;
  389. /**
  390. * If there is a pending invocation of the debounced function, invoke it immediately and return
  391. * its return value.
  392. *
  393. * Otherwise, return the value from the last invocation, or undefined if the debounced function
  394. * was never invoked.
  395. */
  396. flush(): ReturnType<T> | undefined;
  397. }
  398. interface DebouncedFuncLeading<T extends (...args: any[]) => any> extends DebouncedFunc<T> {
  399. (...args: Parameters<T>): ReturnType<T>;
  400. flush(): ReturnType<T>;
  401. }
  402. interface LoDashStatic {
  403. /**
  404. * Creates a debounced function that delays invoking func until after wait milliseconds have elapsed since
  405. * the last time the debounced function was invoked. The debounced function comes with a cancel method to
  406. * cancel delayed invocations and a flush method to immediately invoke them. Provide an options object to
  407. * indicate that func should be invoked on the leading and/or trailing edge of the wait timeout. Subsequent
  408. * calls to the debounced function return the result of the last func invocation.
  409. *
  410. * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only
  411. * if the the debounced function is invoked more than once during the wait timeout.
  412. *
  413. * See David Corbacho’s article for details over the differences between _.debounce and _.throttle.
  414. *
  415. * @param func The function to debounce.
  416. * @param wait The number of milliseconds to delay.
  417. * @param options The options object.
  418. * @param options.leading Specify invoking on the leading edge of the timeout.
  419. * @param options.maxWait The maximum time func is allowed to be delayed before it’s invoked.
  420. * @param options.trailing Specify invoking on the trailing edge of the timeout.
  421. * @return Returns the new debounced function.
  422. */
  423. debounce<T extends (...args: any) => any>(func: T, wait: number | undefined, options: DebounceSettingsLeading): DebouncedFuncLeading<T>;
  424. debounce<T extends (...args: any) => any>(func: T, wait?: number, options?: DebounceSettings): DebouncedFunc<T>;
  425. }
  426. interface Function<T extends (...args: any) => any> {
  427. /**
  428. * @see _.debounce
  429. */
  430. debounce(
  431. wait: number | undefined,
  432. options: DebounceSettingsLeading
  433. ): T extends (...args: any[]) => any ? Function<DebouncedFuncLeading<T>> : never;
  434. debounce(
  435. wait?: number,
  436. options?: DebounceSettings
  437. ): T extends (...args: any[]) => any ? Function<DebouncedFunc<T>> : never;
  438. }
  439. interface FunctionChain<T extends (...args: any) => any> {
  440. /**
  441. * @see _.debounce
  442. */
  443. debounce(
  444. wait: number | undefined,
  445. options: DebounceSettingsLeading
  446. ): T extends (...args: any[]) => any ? FunctionChain<DebouncedFuncLeading<T>> : never;
  447. debounce(
  448. wait?: number,
  449. options?: DebounceSettings
  450. ): T extends (...args: any[]) => any ? FunctionChain<DebouncedFunc<T>> : never;
  451. }
  452. interface LoDashStatic {
  453. /**
  454. * Defers invoking the func until the current call stack has cleared. Any additional arguments are provided to
  455. * func when it’s invoked.
  456. *
  457. * @param func The function to defer.
  458. * @param args The arguments to invoke the function with.
  459. * @return Returns the timer id.
  460. */
  461. defer(func: (...args: any[]) => any, ...args: any[]): number;
  462. }
  463. interface LoDashImplicitWrapper<TValue> {
  464. /**
  465. * @see _.defer
  466. */
  467. defer(...args: any[]): Primitive<number>;
  468. }
  469. interface LoDashExplicitWrapper<TValue> {
  470. /**
  471. * @see _.defer
  472. */
  473. defer(...args: any[]): PrimitiveChain<number>;
  474. }
  475. interface LoDashStatic {
  476. /**
  477. * Invokes func after wait milliseconds. Any additional arguments are provided to func when it’s invoked.
  478. *
  479. * @param func The function to delay.
  480. * @param wait The number of milliseconds to delay invocation.
  481. * @param args The arguments to invoke the function with.
  482. * @return Returns the timer id.
  483. */
  484. delay(func: (...args: any[]) => any, wait: number, ...args: any[]): number;
  485. }
  486. interface LoDashImplicitWrapper<TValue> {
  487. /**
  488. * @see _.delay
  489. */
  490. delay(wait: number, ...args: any[]): Primitive<number>;
  491. }
  492. interface LoDashExplicitWrapper<TValue> {
  493. /**
  494. * @see _.delay
  495. */
  496. delay(wait: number, ...args: any[]): PrimitiveChain<number>;
  497. }
  498. interface LoDashStatic {
  499. /**
  500. * Creates a function that invokes `func` with arguments reversed.
  501. *
  502. * @category Function
  503. * @param func The function to flip arguments for.
  504. * @returns Returns the new function.
  505. * @example
  506. *
  507. * var flipped = _.flip(function() {
  508. * return _.toArray(arguments);
  509. * });
  510. *
  511. * flipped('a', 'b', 'c', 'd');
  512. * // => ['d', 'c', 'b', 'a']
  513. */
  514. flip<T extends (...args: any) => any>(func: T): T;
  515. }
  516. interface Function<T extends (...args: any) => any> {
  517. /**
  518. * @see _.flip
  519. */
  520. flip(): this;
  521. }
  522. interface FunctionChain<T extends (...args: any) => any> {
  523. /**
  524. * @see _.flip
  525. */
  526. flip(): this;
  527. }
  528. interface MemoizedFunction {
  529. /**
  530. * @see _.cache
  531. */
  532. cache: MapCache;
  533. }
  534. interface LoDashStatic {
  535. /**
  536. * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for
  537. * storing the result based on the arguments provided to the memoized function. By default, the first argument
  538. * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with
  539. * the this binding of the memoized function.
  540. *
  541. * @param func The function to have its output memoized.
  542. * @param resolver The function to resolve the cache key.
  543. * @return Returns the new memoizing function.
  544. */
  545. memoize: {
  546. <T extends (...args: any) => any>(func: T, resolver?: (...args: Parameters<T>) => any): T & MemoizedFunction;
  547. Cache: MapCacheConstructor;
  548. };
  549. }
  550. interface Function<T extends (...args: any) => any> {
  551. /**
  552. * @see _.memoize
  553. */
  554. memoize(resolver?: (...args: any[]) => any): Function<T & MemoizedFunction>;
  555. }
  556. interface FunctionChain<T extends (...args: any) => any> {
  557. /**
  558. * @see _.memoize
  559. */
  560. memoize(resolver?: (...args: any[]) => any): FunctionChain<T & MemoizedFunction>;
  561. }
  562. interface LoDashStatic {
  563. /**
  564. * Creates a function that negates the result of the predicate func. The func predicate is invoked with
  565. * the this binding and arguments of the created function.
  566. *
  567. * @param predicate The predicate to negate.
  568. * @return Returns the new function.
  569. */
  570. negate<T extends any[]>(predicate: (...args: T) => boolean): (...args: T) => boolean;
  571. }
  572. interface Function<T extends (...args: any) => any> {
  573. /**
  574. * @see _.negate
  575. */
  576. negate(): Function<(...args: Parameters<T>) => boolean>;
  577. }
  578. interface FunctionChain<T extends (...args: any) => any> {
  579. /**
  580. * @see _.negate
  581. */
  582. negate(): FunctionChain<(...args: Parameters<T>) => boolean>;
  583. }
  584. interface LoDashStatic {
  585. /**
  586. * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value
  587. * of the first call. The func is invoked with the this binding and arguments of the created function.
  588. *
  589. * @param func The function to restrict.
  590. * @return Returns the new restricted function.
  591. */
  592. once<T extends (...args: any) => any>(func: T): T;
  593. }
  594. interface Function<T extends (...args: any) => any> {
  595. /**
  596. * @see _.once
  597. */
  598. once(): Function<T>;
  599. }
  600. interface FunctionChain<T extends (...args: any) => any> {
  601. /**
  602. * @see _.once
  603. */
  604. once(): FunctionChain<T>;
  605. }
  606. interface LoDashStatic {
  607. /**
  608. * Creates a function that runs each argument through a corresponding transform function.
  609. *
  610. * @param func The function to wrap.
  611. * @param transforms The functions to transform arguments, specified as individual functions or arrays
  612. * of functions.
  613. * @return Returns the new function.
  614. */
  615. overArgs(func: (...args: any[]) => any, ...transforms: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
  616. }
  617. interface Function<T extends (...args: any) => any> {
  618. /**
  619. * @see _.overArgs
  620. */
  621. overArgs(...transforms: Array<Many<(...args: any[]) => any>>): Function<(...args: any[]) => any>;
  622. }
  623. interface FunctionChain<T extends (...args: any) => any> {
  624. /**
  625. * @see _.overArgs
  626. */
  627. overArgs(...transforms: Array<Many<(...args: any[]) => any>>): FunctionChain<(...args: any[]) => any>;
  628. }
  629. interface LoDashStatic {
  630. /**
  631. * Creates a function that, when called, invokes func with any additional partial arguments
  632. * prepended to those provided to the new function. This method is similar to _.bind except
  633. * it does not alter the this binding.
  634. * @param func The function to partially apply arguments to.
  635. * @param args Arguments to be partially applied.
  636. * @return The new partially applied function.
  637. */
  638. partial: Partial;
  639. }
  640. type __ = LoDashStatic;
  641. type Function0<R> = () => R;
  642. type Function1<T1, R> = (t1: T1) => R;
  643. type Function2<T1, T2, R> = (t1: T1, t2: T2) => R;
  644. type Function3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;
  645. type Function4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;
  646. interface Partial {
  647. <T1, T2, R>(func: Function2<T1, T2, R>, plc1: __, arg2: T2): Function1<T1, R>;
  648. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2): Function2<T1, T3, R>;
  649. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, plc2: __, arg3: T3): Function2<T1, T2, R>;
  650. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3): Function1<T2, R>;
  651. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: __, arg2: T2, arg3: T3): Function1<T1, R>;
  652. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2): Function3<T1, T3, T4, R>;
  653. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3): Function3<T1, T2, T4, R>;
  654. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3): Function2<T2, T4, R>;
  655. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3): Function2<T1, T4, R>;
  656. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, plc3: __, arg4: T4): Function3<T1, T2, T3, R>;
  657. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4): Function2<T2, T3, R>;
  658. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, plc3: __, arg4: T4): Function2<T1, T3, R>;
  659. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4): Function1<T3, R>;
  660. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, plc2: __, arg3: T3, arg4: T4): Function2<T1, T2, R>;
  661. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4): Function1<T2, R>;
  662. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: __, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;
  663. <TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;
  664. <TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;
  665. <TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;
  666. <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;
  667. <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;
  668. placeholder: __;
  669. }
  670. interface Function<T extends (...args: any) => any> {
  671. /**
  672. * @see _.partial
  673. */
  674. partial<T2>(plc1: __, arg2: T2): Function<
  675. T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> :
  676. T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
  677. T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
  678. any
  679. >;
  680. /**
  681. * @see _.partial
  682. */
  683. partial<T3>(plc1: __, plc2: __, arg3: T3): Function<
  684. T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
  685. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  686. any
  687. >;
  688. /**
  689. * @see _.partial
  690. */
  691. partial<T1, T3>(arg1: T1, plc2: __, arg3: T3): Function<
  692. T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
  693. T extends Function4<T1, infer T2, T3, infer T4, infer R> ? Function2<T2, T4, R> :
  694. any
  695. >;
  696. /**
  697. * @see _.partial
  698. */
  699. partial<T2, T3>(plc1: __, arg2: T2, arg3: T3): Function<
  700. T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
  701. T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
  702. any
  703. >;
  704. /**
  705. * @see _.partial
  706. */
  707. partial<T3>(plc1: __, plc2: __, arg3: T3): Function<
  708. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  709. any
  710. >;
  711. /**
  712. * @see _.partial
  713. */
  714. partial<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): Function<
  715. T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
  716. any
  717. >;
  718. /**
  719. * @see _.partial
  720. */
  721. partial<T2, T4>(plc1: __, arg2: T2, plc3: __, arg4: T4): Function<
  722. T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
  723. any
  724. >;
  725. /**
  726. * @see _.partial
  727. */
  728. partial<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): Function<
  729. T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
  730. any
  731. >;
  732. /**
  733. * @see _.partial
  734. */
  735. partial<T3, T4>(plc1: __, plc2: __, arg3: T3, arg4: T4): Function<
  736. T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
  737. any
  738. >;
  739. /**
  740. * @see _.partial
  741. */
  742. partial<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): Function<
  743. T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
  744. any
  745. >;
  746. /**
  747. * @see _.partial
  748. */
  749. partial<T2, T3, T4>(plc1: __, arg2: T2, arg3: T3, arg4: T4): Function<
  750. T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
  751. any
  752. >;
  753. /**
  754. * @see _.partial
  755. */
  756. partial<T1, T2, T3, T4>(arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function<
  757. T extends (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  758. any
  759. >;
  760. /**
  761. * @see _.partial
  762. */
  763. partial<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): Function<
  764. T extends (t1: T1, t2: T2, t3: T3, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  765. any
  766. >;
  767. /**
  768. * @see _.partial
  769. */
  770. partial<T1, T2>(arg1: T1, arg2: T2): Function<
  771. T extends (t1: T1, t2: T2, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  772. any
  773. >;
  774. /**
  775. * @see _.partial
  776. */
  777. partial<T1>(arg1: T1): Function<
  778. T extends (t1: T1, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  779. any
  780. >;
  781. /**
  782. * @see _.partial
  783. */
  784. partial(): Function<T extends (...ts: any[]) => any ? T : any>;
  785. }
  786. interface FunctionChain<T extends (...args: any) => any> {
  787. /**
  788. * @see _.partial
  789. */
  790. partial<T2>(plc1: __, arg2: T2): FunctionChain<
  791. T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> :
  792. T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
  793. T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
  794. any
  795. >;
  796. /**
  797. * @see _.partial
  798. */
  799. partial<T3>(plc1: __, plc2: __, arg3: T3): FunctionChain<
  800. T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
  801. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  802. any
  803. >;
  804. /**
  805. * @see _.partial
  806. */
  807. partial<T1, T3>(arg1: T1, plc2: __, arg3: T3): FunctionChain<
  808. T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
  809. T extends Function4<T1, infer T2, T3, infer T4, infer R> ? Function2<T2, T4, R> :
  810. any
  811. >;
  812. /**
  813. * @see _.partial
  814. */
  815. partial<T2, T3>(plc1: __, arg2: T2, arg3: T3): FunctionChain<
  816. T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
  817. T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
  818. any
  819. >;
  820. /**
  821. * @see _.partial
  822. */
  823. partial<T3>(plc1: __, plc2: __, arg3: T3): FunctionChain<
  824. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  825. any
  826. >;
  827. /**
  828. * @see _.partial
  829. */
  830. partial<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): FunctionChain<
  831. T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
  832. any
  833. >;
  834. /**
  835. * @see _.partial
  836. */
  837. partial<T2, T4>(plc1: __, arg2: T2, plc3: __, arg4: T4): FunctionChain<
  838. T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
  839. any
  840. >;
  841. /**
  842. * @see _.partial
  843. */
  844. partial<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): FunctionChain<
  845. T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
  846. any
  847. >;
  848. /**
  849. * @see _.partial
  850. */
  851. partial<T3, T4>(plc1: __, plc2: __, arg3: T3, arg4: T4): FunctionChain<
  852. T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
  853. any
  854. >;
  855. /**
  856. * @see _.partial
  857. */
  858. partial<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): FunctionChain<
  859. T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
  860. any
  861. >;
  862. /**
  863. * @see _.partial
  864. */
  865. partial<T2, T3, T4>(plc1: __, arg2: T2, arg3: T3, arg4: T4): FunctionChain<
  866. T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
  867. any
  868. >;
  869. /**
  870. * @see _.partial
  871. */
  872. partial<T1, T2, T3, T4>(arg1: T1, arg2: T2, arg3: T3, arg4: T4): FunctionChain<
  873. T extends (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  874. any
  875. >;
  876. /**
  877. * @see _.partial
  878. */
  879. partial<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3): FunctionChain<
  880. T extends (t1: T1, t2: T2, t3: T3, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  881. any
  882. >;
  883. /**
  884. * @see _.partial
  885. */
  886. partial<T1, T2>(arg1: T1, arg2: T2): FunctionChain<
  887. T extends (t1: T1, t2: T2, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  888. any
  889. >;
  890. /**
  891. * @see _.partial
  892. */
  893. partial<T1>(arg1: T1): FunctionChain<
  894. T extends (t1: T1, ...ts: infer TS) => infer R ? (...ts: TS) => R :
  895. any
  896. >;
  897. /**
  898. * @see _.partial
  899. */
  900. partial(): FunctionChain<T extends (...ts: any[]) => any ? T : any>;
  901. }
  902. interface LoDashStatic {
  903. /**
  904. * This method is like _.partial except that partial arguments are appended to those provided
  905. * to the new function.
  906. * @param func The function to partially apply arguments to.
  907. * @param args Arguments to be partially applied.
  908. * @return The new partially applied function.
  909. */
  910. partialRight: PartialRight;
  911. }
  912. interface PartialRight {
  913. <R>(func: Function0<R>): Function0<R>;
  914. <T1, R>(func: Function1<T1, R>): Function1<T1, R>;
  915. <T1, R>(func: Function1<T1, R>, arg1: T1): Function0<R>;
  916. <T1, T2, R>(func: Function2<T1, T2, R>): Function2<T1, T2, R>;
  917. <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, plc2: __): Function1<T2, R>;
  918. <T1, T2, R>(func: Function2<T1, T2, R>, arg2: T2): Function1<T1, R>;
  919. <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2): Function0<R>;
  920. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>): Function3<T1, T2, T3, R>;
  921. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, plc3: __): Function2<T2, T3, R>;
  922. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg2: T2, plc3: __): Function2<T1, T3, R>;
  923. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, plc3: __): Function1<T3, R>;
  924. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg3: T3): Function2<T1, T2, R>;
  925. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: __, arg3: T3): Function1<T2, R>;
  926. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg2: T2, arg3: T3): Function1<T1, R>;
  927. <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3): Function0<R>;
  928. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>): Function4<T1, T2, T3, T4, R>;
  929. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, plc4: __): Function3<T2, T3, T4, R>;
  930. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, plc3: __, plc4: __): Function3<T1, T3, T4, R>;
  931. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, plc4: __): Function2<T3, T4, R>;
  932. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg3: T3, plc4: __): Function3<T1, T2, T4, R>;
  933. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, plc4: __): Function2<T2, T4, R>;
  934. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, arg3: T3, plc4: __): Function2<T1, T4, R>;
  935. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, plc4: __): Function1<T4, R>;
  936. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg4: T4): Function3<T1, T2, T3, R>;
  937. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, plc3: __, arg4: T4): Function2<T2, T3, R>;
  938. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, plc3: __, arg4: T4): Function2<T1, T3, R>;
  939. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: __, arg4: T4): Function1<T3, R>;
  940. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg3: T3, arg4: T4): Function2<T1, T2, R>;
  941. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: __, arg3: T3, arg4: T4): Function1<T2, R>;
  942. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;
  943. <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0<R>;
  944. (func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
  945. placeholder: __;
  946. }
  947. interface Function<T extends (...args: any) => any> {
  948. /**
  949. * @see _.partialRight
  950. */
  951. partialRight<T1>(arg1: T1, plc2: __): Function<
  952. T extends Function2<T1, infer T2, infer R> ? Function1<T2, R> :
  953. any
  954. >;
  955. /**
  956. * @see _.partialRight
  957. */
  958. partialRight<T2>(arg2: T2): Function<
  959. T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> : any
  960. >;
  961. /**
  962. * @see _.partialRight
  963. */
  964. partialRight<T1>(arg1: T1, plc2: __, plc3: __): Function<
  965. T extends Function3<T1, infer T2, infer T3, infer R> ? Function2<T2, T3, R> :
  966. any
  967. >;
  968. /**
  969. * @see _.partialRight
  970. */
  971. partialRight<T2>(arg2: T2, plc3: __): Function<
  972. T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
  973. any
  974. >;
  975. /**
  976. * @see _.partialRight
  977. */
  978. partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __): Function<
  979. T extends Function3<T1, T2, infer T3, infer R> ? Function1<T3, R> :
  980. any
  981. >;
  982. /**
  983. * @see _.partialRight
  984. */
  985. partialRight<T3>(arg3: T3): Function<
  986. T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
  987. any
  988. >;
  989. /**
  990. * @see _.partialRight
  991. */
  992. partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3): Function<
  993. T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
  994. any
  995. >;
  996. /**
  997. * @see _.partialRight
  998. */
  999. partialRight<T2, T3>(arg2: T2, arg3: T3): Function<
  1000. T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
  1001. any
  1002. >;
  1003. /**
  1004. * @see _.partialRight
  1005. */
  1006. partialRight<T1>(arg1: T1, plc2: __, plc3: __, plc4: __): Function<
  1007. T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function3<T2, T3, T4, R> :
  1008. any
  1009. >;
  1010. /**
  1011. * @see _.partialRight
  1012. */
  1013. partialRight<T2>(arg2: T2, plc3: __, plc4: __): Function<
  1014. T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
  1015. any
  1016. >;
  1017. /**
  1018. * @see _.partialRight
  1019. */
  1020. partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __, plc4: __): Function<
  1021. T extends Function4<T1, T2, infer T3, infer T4, infer R> ? Function2<T3, T4, R> :
  1022. any
  1023. >;
  1024. /**
  1025. * @see _.partialRight
  1026. */
  1027. partialRight<T3>(arg3: T3, plc4: __): Function<
  1028. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  1029. any
  1030. >;
  1031. /**
  1032. * @see _.partialRight
  1033. */
  1034. partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3, plc4: __): Function<
  1035. T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function2<T2, T4, R> :
  1036. any
  1037. >;
  1038. /**
  1039. * @see _.partialRight
  1040. */
  1041. partialRight<T2, T3>(arg2: T2, arg3: T3, plc4: __): Function<
  1042. T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
  1043. any
  1044. >;
  1045. /**
  1046. * @see _.partialRight
  1047. */
  1048. partialRight<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3, plc4: __): Function<
  1049. T extends Function4<T1, T2, T3, infer T4, infer R> ? Function1<T4, R> :
  1050. any
  1051. >;
  1052. /**
  1053. * @see _.partialRight
  1054. */
  1055. partialRight<T4>(arg4: T4): Function<
  1056. T extends Function4<infer T1, infer T2, infer T3, T4, infer R> ? Function3<T1, T2, T3, R> :
  1057. any
  1058. >;
  1059. /**
  1060. * @see _.partialRight
  1061. */
  1062. partialRight<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): Function<
  1063. T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
  1064. any
  1065. >;
  1066. /**
  1067. * @see _.partialRight
  1068. */
  1069. partialRight<T2, T4>(arg2: T2, plc3: __, arg4: T4): Function<
  1070. T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
  1071. any
  1072. >;
  1073. /**
  1074. * @see _.partialRight
  1075. */
  1076. partialRight<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): Function<
  1077. T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
  1078. any
  1079. >;
  1080. /**
  1081. * @see _.partialRight
  1082. */
  1083. partialRight<T3, T4>(arg3: T3, arg4: T4): Function<
  1084. T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
  1085. any
  1086. >;
  1087. /**
  1088. * @see _.partialRight
  1089. */
  1090. partialRight<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): Function<
  1091. T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
  1092. any
  1093. >;
  1094. /**
  1095. * @see _.partialRight
  1096. */
  1097. partialRight<T2, T3, T4>(arg2: T2, arg3: T3, arg4: T4): Function<
  1098. T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
  1099. any
  1100. >;
  1101. /**
  1102. * @see _.partialRight
  1103. */
  1104. partialRight<TS extends any[]>(...ts: TS): Function<T extends (...args: TS) => infer R ? () => R : any>;
  1105. /**
  1106. * @see _.partialRight
  1107. */
  1108. partialRight(): Function<T extends (...ts: any[]) => any ? T : any>;
  1109. }
  1110. interface FunctionChain<T extends (...args: any) => any> {
  1111. /**
  1112. * @see _.partialRight
  1113. */
  1114. partialRight<T1>(arg1: T1, plc2: __): FunctionChain<
  1115. T extends Function2<T1, infer T2, infer R> ? Function1<T2, R> :
  1116. any
  1117. >;
  1118. /**
  1119. * @see _.partialRight
  1120. */
  1121. partialRight<T2>(arg2: T2): FunctionChain<
  1122. T extends Function2<infer T1, T2, infer R> ? Function1<T1, R> : any
  1123. >;
  1124. /**
  1125. * @see _.partialRight
  1126. */
  1127. partialRight<T1>(arg1: T1, plc2: __, plc3: __): FunctionChain<
  1128. T extends Function3<T1, infer T2, infer T3, infer R> ? Function2<T2, T3, R> :
  1129. any
  1130. >;
  1131. /**
  1132. * @see _.partialRight
  1133. */
  1134. partialRight<T2>(arg2: T2, plc3: __): FunctionChain<
  1135. T extends Function3<infer T1, T2, infer T3, infer R> ? Function2<T1, T3, R> :
  1136. any
  1137. >;
  1138. /**
  1139. * @see _.partialRight
  1140. */
  1141. partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __): FunctionChain<
  1142. T extends Function3<T1, T2, infer T3, infer R> ? Function1<T3, R> :
  1143. any
  1144. >;
  1145. /**
  1146. * @see _.partialRight
  1147. */
  1148. partialRight<T3>(arg3: T3): FunctionChain<
  1149. T extends Function3<infer T1, infer T2, T3, infer R> ? Function2<T1, T2, R> :
  1150. any
  1151. >;
  1152. /**
  1153. * @see _.partialRight
  1154. */
  1155. partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3): FunctionChain<
  1156. T extends Function3<T1, infer T2, T3, infer R> ? Function1<T2, R> :
  1157. any
  1158. >;
  1159. /**
  1160. * @see _.partialRight
  1161. */
  1162. partialRight<T2, T3>(arg2: T2, arg3: T3): FunctionChain<
  1163. T extends Function3<infer T1, T2, T3, infer R> ? Function1<T1, R> :
  1164. any
  1165. >;
  1166. /**
  1167. * @see _.partialRight
  1168. */
  1169. partialRight<T1>(arg1: T1, plc2: __, plc3: __, plc4: __): FunctionChain<
  1170. T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function3<T2, T3, T4, R> :
  1171. any
  1172. >;
  1173. /**
  1174. * @see _.partialRight
  1175. */
  1176. partialRight<T2>(arg2: T2, plc3: __, plc4: __): FunctionChain<
  1177. T extends Function4<infer T1, T2, infer T3, infer T4, infer R> ? Function3<T1, T3, T4, R> :
  1178. any
  1179. >;
  1180. /**
  1181. * @see _.partialRight
  1182. */
  1183. partialRight<T1, T2>(arg1: T1, arg2: T2, plc3: __, plc4: __): FunctionChain<
  1184. T extends Function4<T1, T2, infer T3, infer T4, infer R> ? Function2<T3, T4, R> :
  1185. any
  1186. >;
  1187. /**
  1188. * @see _.partialRight
  1189. */
  1190. partialRight<T3>(arg3: T3, plc4: __): FunctionChain<
  1191. T extends Function4<infer T1, infer T2, T3, infer T4, infer R> ? Function3<T1, T2, T4, R> :
  1192. any
  1193. >;
  1194. /**
  1195. * @see _.partialRight
  1196. */
  1197. partialRight<T1, T3>(arg1: T1, plc2: __, arg3: T3, plc4: __): FunctionChain<
  1198. T extends Function4<T1, infer T2, infer T3, infer T4, infer R> ? Function2<T2, T4, R> :
  1199. any
  1200. >;
  1201. /**
  1202. * @see _.partialRight
  1203. */
  1204. partialRight<T2, T3>(arg2: T2, arg3: T3, plc4: __): FunctionChain<
  1205. T extends Function4<infer T1, T2, T3, infer T4, infer R> ? Function2<T1, T4, R> :
  1206. any
  1207. >;
  1208. /**
  1209. * @see _.partialRight
  1210. */
  1211. partialRight<T1, T2, T3>(arg1: T1, arg2: T2, arg3: T3, plc4: __): FunctionChain<
  1212. T extends Function4<T1, T2, T3, infer T4, infer R> ? Function1<T4, R> :
  1213. any
  1214. >;
  1215. /**
  1216. * @see _.partialRight
  1217. */
  1218. partialRight<T4>(arg4: T4): FunctionChain<
  1219. T extends Function4<infer T1, infer T2, infer T3, T4, infer R> ? Function3<T1, T2, T3, R> :
  1220. any
  1221. >;
  1222. /**
  1223. * @see _.partialRight
  1224. */
  1225. partialRight<T1, T4>(arg1: T1, plc2: __, plc3: __, arg4: T4): FunctionChain<
  1226. T extends Function4<T1, infer T2, infer T3, T4, infer R> ? Function2<T2, T3, R> :
  1227. any
  1228. >;
  1229. /**
  1230. * @see _.partialRight
  1231. */
  1232. partialRight<T2, T4>(arg2: T2, plc3: __, arg4: T4): FunctionChain<
  1233. T extends Function4<infer T1, T2, infer T3, T4, infer R> ? Function2<T1, T3, R> :
  1234. any
  1235. >;
  1236. /**
  1237. * @see _.partialRight
  1238. */
  1239. partialRight<T1, T2, T4>(arg1: T1, arg2: T2, plc3: __, arg4: T4): FunctionChain<
  1240. T extends Function4<T1, T2, infer T3, T4, infer R> ? Function1<T3, R> :
  1241. any
  1242. >;
  1243. /**
  1244. * @see _.partialRight
  1245. */
  1246. partialRight<T3, T4>(arg3: T3, arg4: T4): FunctionChain<
  1247. T extends Function4<infer T1, infer T2, T3, T4, infer R> ? Function2<T1, T2, R> :
  1248. any
  1249. >;
  1250. /**
  1251. * @see _.partialRight
  1252. */
  1253. partialRight<T1, T3, T4>(arg1: T1, plc2: __, arg3: T3, arg4: T4): FunctionChain<
  1254. T extends Function4<T1, infer T2, T3, T4, infer R> ? Function1<T2, R> :
  1255. any
  1256. >;
  1257. /**
  1258. * @see _.partialRight
  1259. */
  1260. partialRight<T2, T3, T4>(arg2: T2, arg3: T3, arg4: T4): FunctionChain<
  1261. T extends Function4<infer T1, T2, T3, T4, infer R> ? Function1<T1, R> :
  1262. any
  1263. >;
  1264. /**
  1265. * @see _.partialRight
  1266. */
  1267. partialRight<TS extends any[]>(...ts: TS): FunctionChain<T extends (...args: TS) => infer R ? () => R : any>;
  1268. /**
  1269. * @see _.partialRight
  1270. */
  1271. partialRight(): FunctionChain<T extends (...ts: any[]) => any ? T : any>;
  1272. }
  1273. interface LoDashStatic {
  1274. /**
  1275. * Creates a function that invokes func with arguments arranged according to the specified indexes where the
  1276. * argument value at the first index is provided as the first argument, the argument value at the second index
  1277. * is provided as the second argument, and so on.
  1278. * @param func The function to rearrange arguments for.
  1279. * @param indexes The arranged argument indexes, specified as individual indexes or arrays of indexes.
  1280. * @return Returns the new function.
  1281. */
  1282. rearg(func: (...args: any[]) => any, ...indexes: Array<Many<number>>): (...args: any[]) => any;
  1283. }
  1284. interface Function<T extends (...args: any) => any> {
  1285. /**
  1286. * @see _.rearg
  1287. */
  1288. rearg(...indexes: Array<Many<number>>): Function<(...args: any[]) => any>;
  1289. }
  1290. interface FunctionChain<T extends (...args: any) => any> {
  1291. /**
  1292. * @see _.rearg
  1293. */
  1294. rearg(...indexes: Array<Many<number>>): FunctionChain<(...args: any[]) => any>;
  1295. }
  1296. interface LoDashStatic {
  1297. /**
  1298. * Creates a function that invokes func with the this binding of the created function and arguments from start
  1299. * and beyond provided as an array.
  1300. *
  1301. * Note: This method is based on the rest parameter.
  1302. *
  1303. * @param func The function to apply a rest parameter to.
  1304. * @param start The start position of the rest parameter.
  1305. * @return Returns the new function.
  1306. */
  1307. rest(func: (...args: any[]) => any, start?: number): (...args: any[]) => any;
  1308. }
  1309. interface Function<T extends (...args: any) => any> {
  1310. /**
  1311. * @see _.rest
  1312. */
  1313. rest(start?: number): Function<(...args: any[]) => any>;
  1314. }
  1315. interface FunctionChain<T extends (...args: any) => any> {
  1316. /**
  1317. * @see _.rest
  1318. */
  1319. rest(start?: number): FunctionChain<(...args: any[]) => any>;
  1320. }
  1321. interface LoDashStatic {
  1322. /**
  1323. * Creates a function that invokes func with the this binding of the created function and an array of arguments
  1324. * much like Function#apply.
  1325. *
  1326. * Note: This method is based on the spread operator.
  1327. *
  1328. * @param func The function to spread arguments over.
  1329. * @return Returns the new function.
  1330. */
  1331. spread<TResult>(func: (...args: any[]) => TResult, start?: number): (...args: any[]) => TResult;
  1332. }
  1333. interface Function<T extends (...args: any) => any> {
  1334. /**
  1335. * @see _.spread
  1336. */
  1337. spread(start?: number): Function<(...args: any[]) => ReturnType<T>>;
  1338. }
  1339. interface FunctionChain<T extends (...args: any) => any> {
  1340. /**
  1341. * @see _.spread
  1342. */
  1343. spread(start?: number): FunctionChain<(...args: any[]) => ReturnType<T>>;
  1344. }
  1345. interface ThrottleSettings {
  1346. /**
  1347. * @see _.leading
  1348. */
  1349. leading?: boolean | undefined;
  1350. /**
  1351. * @see _.trailing
  1352. */
  1353. trailing?: boolean | undefined;
  1354. }
  1355. type ThrottleSettingsLeading = (ThrottleSettings & { leading: true }) | Omit<ThrottleSettings, 'leading'>
  1356. interface LoDashStatic {
  1357. /**
  1358. * Creates a throttled function that only invokes func at most once per every wait milliseconds. The throttled
  1359. * function comes with a cancel method to cancel delayed invocations and a flush method to immediately invoke
  1360. * them. Provide an options object to indicate that func should be invoked on the leading and/or trailing edge
  1361. * of the wait timeout. Subsequent calls to the throttled function return the result of the last func call.
  1362. *
  1363. * Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only if
  1364. * the the throttled function is invoked more than once during the wait timeout.
  1365. *
  1366. * @param func The function to throttle.
  1367. * @param wait The number of milliseconds to throttle invocations to.
  1368. * @param options The options object.
  1369. * @param options.leading Specify invoking on the leading edge of the timeout.
  1370. * @param options.trailing Specify invoking on the trailing edge of the timeout.
  1371. * @return Returns the new throttled function.
  1372. */
  1373. throttle<T extends (...args: any) => any>(func: T, wait?: number, options?: ThrottleSettingsLeading): DebouncedFuncLeading<T>;
  1374. throttle<T extends (...args: any) => any>(func: T, wait?: number, options?: ThrottleSettings): DebouncedFunc<T>;
  1375. }
  1376. interface Function<T extends (...args: any) => any> {
  1377. /**
  1378. * @see _.throttle
  1379. */
  1380. throttle(
  1381. wait?: number,
  1382. options?: ThrottleSettingsLeading
  1383. ): T extends (...args: any[]) => any ? Function<DebouncedFuncLeading<T>> : never;
  1384. throttle(
  1385. wait?: number,
  1386. options?: ThrottleSettings
  1387. ): T extends (...args: any[]) => any ? Function<DebouncedFunc<T>> : never;
  1388. }
  1389. interface FunctionChain<T extends (...args: any) => any> {
  1390. /**
  1391. * @see _.throttle
  1392. */
  1393. throttle(
  1394. wait?: number,
  1395. options?: ThrottleSettingsLeading
  1396. ): T extends (...args: any[]) => any ? FunctionChain<DebouncedFuncLeading<T>> : never;
  1397. throttle(
  1398. wait?: number,
  1399. options?: ThrottleSettings
  1400. ): T extends (...args: any[]) => any ? FunctionChain<DebouncedFunc<T>> : never;
  1401. }
  1402. interface LoDashStatic {
  1403. /**
  1404. * Creates a function that accepts up to one argument, ignoring any
  1405. * additional arguments.
  1406. *
  1407. * @category Function
  1408. * @param func The function to cap arguments for.
  1409. * @returns Returns the new function.
  1410. * @example
  1411. *
  1412. * _.map(['6', '8', '10'], _.unary(parseInt));
  1413. * // => [6, 8, 10]
  1414. */
  1415. unary<T, TResult>(func: (arg1: T, ...args: any[]) => TResult): (arg1: T) => TResult;
  1416. }
  1417. interface Function<T extends (...args: any) => any> {
  1418. /**
  1419. * @see _.unary
  1420. */
  1421. unary(): Function<(arg1: Parameters<T>['0']) => ReturnType<T>>;
  1422. }
  1423. interface FunctionChain<T extends (...args: any) => any> {
  1424. /**
  1425. * @see _.unary
  1426. */
  1427. unary(): FunctionChain<(arg1: Parameters<T>['0']) => ReturnType<T>>;
  1428. }
  1429. interface LoDashStatic {
  1430. /**
  1431. * Creates a function that provides value to the wrapper function as its first argument. Any additional
  1432. * arguments provided to the function are appended to those provided to the wrapper function. The wrapper is
  1433. * invoked with the this binding of the created function.
  1434. *
  1435. * @param value The value to wrap.
  1436. * @param wrapper The wrapper function.
  1437. * @return Returns the new function.
  1438. */
  1439. wrap<T, TArgs, TResult>(value: T, wrapper: (value: T, ...args: TArgs[]) => TResult): (...args: TArgs[]) => TResult;
  1440. }
  1441. interface LoDashImplicitWrapper<TValue> {
  1442. /**
  1443. * @see _.wrap
  1444. */
  1445. wrap<TArgs, TResult>(wrapper: (value: TValue, ...args: TArgs[]) => TResult): Function<(...args: TArgs[]) => TResult>;
  1446. }
  1447. interface LoDashExplicitWrapper<TValue> {
  1448. /**
  1449. * @see _.wrap
  1450. */
  1451. wrap<TArgs, TResult>(wrapper: (value: TValue, ...args: TArgs[]) => TResult): FunctionChain<(...args: TArgs[]) => TResult>;
  1452. }
  1453. }