diff --git a/angular-loading-bar/angular-loading-bar-tests.ts b/angular-loading-bar/angular-loading-bar-tests.ts
new file mode 100644
index 000000000..b7ca2894e
--- /dev/null
+++ b/angular-loading-bar/angular-loading-bar-tests.ts
@@ -0,0 +1,15 @@
+///
+
+var app = angular.module('testModule', ['angular-loading-bar']);
+
+class TestController {
+
+ constructor($http: ng.IHttpService) {
+
+ $http.get("http://xyz.com", { ignoreLoadingBar: true })
+
+ }
+
+}
+
+app.controller('TestController', TestController);
diff --git a/angular-loading-bar/angular-loading-bar.d.ts b/angular-loading-bar/angular-loading-bar.d.ts
new file mode 100644
index 000000000..b1a8cd55d
--- /dev/null
+++ b/angular-loading-bar/angular-loading-bar.d.ts
@@ -0,0 +1,18 @@
+// Type definitions for angular-loading-bar
+// Project: https://github.com/chieffancypants/angular-loading-bar
+// Definitions by: Stephen Lautier
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+
+declare module angular {
+
+ interface IRequestShortcutConfig {
+ /**
+ * Indicates that the loading bar should be hidden.
+ */
+ ignoreLoadingBar?: boolean;
+ }
+
+}
\ No newline at end of file
diff --git a/async/async.d.ts b/async/async.d.ts
index a8b38c5fc..6054e9a47 100644
--- a/async/async.d.ts
+++ b/async/async.d.ts
@@ -1,6 +1,6 @@
// Type definitions for Async 1.4.2
// Project: https://github.com/caolan/async
-// Definitions by: Boris Yankov , Arseniy Maximov
+// Definitions by: Boris Yankov , Arseniy Maximov , Joe Herman
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface Dictionary { [key: string]: T; }
@@ -10,7 +10,7 @@ interface AsyncResultCallback { (err: Error, result: T): void; }
interface AsyncResultArrayCallback { (err: Error, results: T[]): void; }
interface AsyncResultObjectCallback { (err: Error, results: Dictionary): void; }
-interface AsyncFunction { (callback: (err: Error, result?: T) => void): void; }
+interface AsyncFunction { (callback: (err?: Error, result?: T) => void): void; }
interface AsyncIterator { (item: T, callback: ErrorCallback): void; }
interface AsyncForEachOfIterator { (item: T, key: number, callback: ErrorCallback): void; }
interface AsyncResultIterator { (item: T, callback: AsyncResultCallback): void; }
@@ -85,15 +85,15 @@ interface Async {
map(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any;
mapSeries(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any;
mapLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any;
- filter(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- select(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- filterSeries(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- selectSeries(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- filterLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- selectLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- reject(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- rejectSeries(arr: T[], iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
- rejectLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: (results: T[]) => any): any;
+ filter(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ select(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ filterSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ selectSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ filterLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ selectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ reject(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ rejectSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
+ rejectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: (results: T[]) => any): any;
reduce(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any;
inject(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any;
foldl(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any;
@@ -126,7 +126,7 @@ interface Async {
during(test: (testCallback : (error: Error, truth: boolean) => void) => void, fn: AsyncVoidFunction, callback: (err: any) => void): void;
doDuring(fn: AsyncVoidFunction, test: (testCallback: (error: Error, truth: boolean) => void) => void, callback: (err: any) => void): void;
forever(next: (errCallback : (err: Error) => void) => void, errBack: (err: Error) => void) : void;
- waterfall(tasks: Function[], callback?: (err: Error, result: any) => void): void;
+ waterfall(tasks: Function[], callback?: (err: Error, results?: any) => void): void;
compose(...fns: Function[]): void;
seq(...fns: Function[]): void;
applyEach(fns: Function[], argsAndCallback: any[]): void; // applyEach(fns, args..., callback). TS does not support ... for a middle argument. Callback is optional.
diff --git a/d3/d3-tests.ts b/d3/d3-tests.ts
index 98888dde7..f4efa75d4 100644
--- a/d3/d3-tests.ts
+++ b/d3/d3-tests.ts
@@ -1450,7 +1450,7 @@ function quadtree() {
// Collapse the quadtree into an array of rectangles.
function nodes(quadtree: d3.geom.quadtree.Quadtree<[number, number]>) {
var nodes: Array<{x: number; y: number; width: number; height: number}> = [];
- quadtree.visit(function (node, x1, y1, x2, y2) {
+ quadtree.visit(function (node: d3.geom.quadtree.Node<[number, number]>, x1: number, y1: number, x2:number, y2: number) {
nodes.push({ x: x1, y: y1, width: x2 - x1, height: y2 - y1 });
} );
return nodes;
@@ -1458,7 +1458,7 @@ function quadtree() {
// Find the nodes within the specified rectangle.
function search(quadtree: d3.geom.quadtree.Quadtree<{ scanned?: boolean; selected?: boolean; 0: number; 1: number }>, x0: number, y0: number, x3: number, y3: number) {
- quadtree.visit(function (node, x1, y1, x2, y2) {
+ quadtree.visit(function (node: d3.geom.quadtree.Node<{ scanned?: boolean; selected?: boolean; 0: number; 1: number }>, x1: number, y1: number, x2:number, y2: number) {
var p = node.point;
if (p) {
p.scanned = true;
diff --git a/d3/d3.d.ts b/d3/d3.d.ts
index fbeca365e..87e6ef0e0 100644
--- a/d3/d3.d.ts
+++ b/d3/d3.d.ts
@@ -3251,7 +3251,7 @@ declare module d3 {
export function delaunay(vertices: Array<[number, number]>): Array<[[number, number], [number, number], [number, number]]>;
export function quadtree(): Quadtree<[number, number]>;
- export function quadtree(): Quadtree;
+ export function quadtree(nodes: T[], x1?: number, y1?: number, x2?: number, y2?: number): quadtree.Quadtree;
module quadtree {
interface Node {
diff --git a/easy-table/easy-table-0.2.0-tests.ts b/easy-table/easy-table-0.2.0-tests.ts
new file mode 100644
index 000000000..93a4516bf
--- /dev/null
+++ b/easy-table/easy-table-0.2.0-tests.ts
@@ -0,0 +1,14 @@
+///
+
+import EasyTable = require('easy-table');
+
+var table = new EasyTable();
+
+table.cell('aa', 1);
+table.cell('bb',1);
+table.newRow();
+
+table.cell('aa', 1);
+table.cell('bb',1);
+
+table.print();
diff --git a/easy-table/easy-table-0.2.0.d.ts b/easy-table/easy-table-0.2.0.d.ts
new file mode 100644
index 000000000..912b089ce
--- /dev/null
+++ b/easy-table/easy-table-0.2.0.d.ts
@@ -0,0 +1,41 @@
+// Type definitions for easy-table 0.2.0
+// Project: https://github.com/eldargab/easy-table
+// Definitions by: Bart van der Schoor
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module "easy-table" {
+ class EasyTable {
+ constructor();
+
+ cell(label: string, value: any, printer?: EasyTable.CellPrinter, width?: number):void;
+ newRow(): void;
+ toString(): string;
+ printTransposed(): string;
+ print(): string;
+ sort(fields: string): void;
+ sort(comparer: (a: any, b: any) => number): void;
+ total(label: string, accumulator: EasyTable.Accumulator, totalPrinter: EasyTable.CellPrinter): void;
+ }
+
+ module EasyTable {
+ function printArray(array: any[], cellPrinter?: CellPrinter, tablePrinter?: Printer): string;
+ function printObject(object: any, cellPrinter?: CellPrinter, tablePrinter?: Printer): string;
+
+ //printer helpers
+ function Number(length: number): CellPrinter;
+ function RightPadder(char: string): CellPrinter;
+ function LeftPadder(char: string): CellPrinter;
+
+ interface CellPrinter extends Function {
+ (obj: any, cell: (label: string, value: any, width?: number) => void):string;
+ }
+ interface Printer extends Function {
+ (table: EasyTable):string;
+ }
+ interface Accumulator extends Function {
+ (sum: number, val: number, index: number, length: number):number;
+ }
+ }
+
+ export = EasyTable;
+}
diff --git a/easy-table/easy-table-tests.ts b/easy-table/easy-table-tests.ts
index 732426064..911031d90 100644
--- a/easy-table/easy-table-tests.ts
+++ b/easy-table/easy-table-tests.ts
@@ -1,15 +1,103 @@
-///
+///
-import EasyTable = require('easy-table');
+import Table = require("easy-table");
-var table = new EasyTable();
+let data = [
+ { id: 123123, desc: 'Something awesome', price: 1000.00 },
+ { id: 245452, desc: 'Very interesting book', price: 11.45 },
+ { id: 232323, desc: 'Yet another product', price: 555.55 }
+];
-table.cell('aa', 1);
-table.cell('bb',1);
-table.newRow();
+interface Data {
+ id: number;
+ desc: string;
+ price: number;
+}
-table.cell('aa', 1);
-table.cell('bb',1);
+function sample_test() {
+ let t = new Table();
+ data.forEach(function(product) {
+ t.cell('Product Id', product.id);
+ t.cell('Description', product.desc);
+ t.cell('Price, USD', product.price, Table.number(2));
+ t.newRow();
+ });
+ console.log(t.toString());
+}
-table.print();
+function static_print() {
+ console.log(Table.print(data));
+}
+function currency(val: number, width?: number) {
+ var str = val.toFixed(2);
+ return width ? str : Table.padLeft(str, width);
+}
+
+function sample_2() {
+ Table.print(data, {
+ desc: { name: 'description' },
+ price: { printer: Table.number(2) }
+ });
+}
+
+function sample_3() {
+ Table.print(data, function(item, cell) {
+ cell('Product id', item.id)
+ cell('Price, USD', item.price)
+ }, function(table) {
+ return table.print()
+ })
+}
+
+function sample_4() {
+ Table.print(data[0]);
+}
+
+function sort_strings() {
+ let t = new Table();
+ t.sort(['Price, USD|des']) // will sort in descending order
+ t.sort(['Price, USD|asc']) // will sort in ascending order
+ t.sort(['Price, USD']) // sorts in ascending order by default
+}
+
+function totalling() {
+ let t = new Table();
+ t.total('Price, USD');
+ t.total('Price, USD', {
+ printer: Table.aggr.printer('Avg: ', currency),
+ reduce: Table.aggr.avg,
+ init: 0
+ })
+
+ // or alternatively
+ t.total('Price, USD', {
+ printer: (val, width) => {
+ return Table.padLeft('Avg: ' + currency(val), width);
+ },
+ reduce: (acc: number, val: number, idx: number, len: number) => {
+ acc = acc + val;
+ return idx + 1 == len ? acc / len : acc;
+ }
+ });
+}
+
+function other_samples() {
+ var t = new Table();
+
+ data.forEach(product => {
+ t.cell('Product Id', product.id)
+ t.cell('Description', product.desc)
+ t.cell('Price, USD', product.price, Table.number(2))
+ t.newRow()
+ })
+
+ t.sort(['Price, USD'])
+ t.total('Price, USD', {
+ printer: Table.number(2)
+ })
+
+ t.log()
+ Table.log(data, { price: { printer: Table.number(2) } })
+ Table.log(data[0])
+}
diff --git a/easy-table/easy-table.d.ts b/easy-table/easy-table.d.ts
index 912b089ce..60bcb0457 100644
--- a/easy-table/easy-table.d.ts
+++ b/easy-table/easy-table.d.ts
@@ -1,40 +1,222 @@
-// Type definitions for easy-table 0.2.0
+// Type definitions for easy-table
// Project: https://github.com/eldargab/easy-table
-// Definitions by: Bart van der Schoor
+// Definitions by: Niklas Mollenhauer
// Definitions: https://github.com/borisyankov/DefinitelyTyped
-declare module "easy-table" {
+declare module "easy-table"
+{
class EasyTable {
- constructor();
- cell(label: string, value: any, printer?: EasyTable.CellPrinter, width?: number):void;
- newRow(): void;
- toString(): string;
- printTransposed(): string;
- print(): string;
- sort(fields: string): void;
- sort(comparer: (a: any, b: any) => number): void;
- total(label: string, accumulator: EasyTable.Accumulator, totalPrinter: EasyTable.CellPrinter): void;
+ /**
+ * String to separate columns
+ */
+ public separator: string;
+
+ /**
+ * Default printer
+ */
+ public static string(value: any): string;
+
+ /**
+ * Create a printer which right aligns the content by padding with `ch` on the left
+ *
+ * @param {String} ch
+ * @returns {Function}
+ */
+ public static leftPadder(ch: string): CellPrinter;
+
+ public static padLeft: CellPrinter;
+
+ /**
+ * Create a printer which pads with `ch` on the right
+ *
+ * @param {String} ch
+ * @returns {Function}
+ */
+ public static rightPadder(ch: string): CellPrinter;
+
+ // public static padRight: CellPrinter;
+
+ /**
+ * Create a printer for numbers
+ *
+ * Will do right alignment and optionally fix the number of digits after decimal point
+ *
+ * @param {Number} [digits] - Number of digits for fixpoint notation
+ * @returns {Function}
+ */
+ public static number(digits?: number): CellPrinter;
+
+ public constructor();
+
+ /**
+ * Push the current row to the table and start a new one
+ *
+ * @returns {Table} `this`
+ */
+ public newRow(): EasyTable;
+
+ /**
+ * Write cell in the current row
+ *
+ * @param {String} col - Column name
+ * @param {Any} val - Cell value
+ * @param {Function} [printer] - Printer function to format the value
+ * @returns {Table} `this`
+ */
+ public cell(col: string, val: T, printer?: CellPrinter): EasyTable;
+
+ /**
+ * Get list of columns in printing order
+ *
+ * @returns {string[]}
+ */
+ public columns(): string[];
+
+ /**
+ * Format just rows, i.e. print the table without headers and totals
+ *
+ * @returns {String} String representaion of the table
+ */
+ public print(): string;
+
+ /**
+ * Format the table
+ *
+ * @returns {String}
+ */
+ public toString(): string;
+
+ /**
+ * Push delimeter row to the table (with each cell filled with dashs during printing)
+ *
+ * @param {String[]} [cols]
+ * @returns {Table} `this`
+ */
+ public pushDelimeter(cols?: string[]): EasyTable;
+
+ /**
+ * Compute all totals and yield the results to `cb`
+ *
+ * @param {Function} cb - Callback function with signature `(column, value, printer)`
+ */
+ public forEachTotal(cb: (column: string, value: T, printer: CellPrinter) => void): void;
+
+ /**
+ * Format the table so that each row represents column and each column represents row
+ *
+ * @param {IPrintColumnOptions} [opts]
+ * @returns {String}
+ */
+ public printTransposed(opts?: PrintColumnOptions): string;
+
+ /**
+ * Sort the table
+ *
+ * @param {Function|string[]} [cmp] - Either compare function or a list of columns to sort on
+ * @returns {Table} `this`
+ */
+ public sort(cmp?: string[]): EasyTable;
+ /**
+ * Sort the table
+ *
+ * @param {Function|string[]} [cmp] - Either compare function or a list of columns to sort on
+ * @returns {Table} `this`
+ */
+ public sort(cmp?: CompareFunction): EasyTable;
+
+ /**
+ * Add a total for the column
+ *
+ * @param {String} col - column name
+ * @param {Object} [opts]
+ * @returns {Table} `this`
+ */
+ public total(col: string, opts?: TotalOptions): EasyTable;
+ /**
+ * Predefined helpers for totals
+ */
+ public static aggr: Aggregators;
+
+ /**
+ * Print the array or object
+ *
+ * @param {Array|Object} obj - Object to print
+ * @param {Function|Object} [format] - Format options
+ * @param {Function} [cb] - Table post processing and formating
+ * @returns {String}
+ */
+ public static print(obj: T | T[], format?: FormatFunction | FormatObject, cb?: TablePostProcessing): string;
+
+ /**
+ * Same as `Table.print()` but yields the result to `console.log()`
+ */
+ public static log(obj: T | T[], format?: FormatFunction | FormatObject, cb?: TablePostProcessing): void;
+ /**
+ * Same as `.toString()` but yields the result to `console.log()`
+ */
+ public log(): void;
}
- module EasyTable {
- function printArray(array: any[], cellPrinter?: CellPrinter, tablePrinter?: Printer): string;
- function printObject(object: any, cellPrinter?: CellPrinter, tablePrinter?: Printer): string;
+ type CellPrinter = (val: T, width: number) => string;
+ type CompareFunction = (a: T, b: T) => number;
+ type ReduceFunction = (acc: T, val: T, idx: number, length: number) => T;
+ type FormatFunction = (obj: T, cell: (name: string, val: any) => void) => void;
+ type TablePostProcessing = (result: EasyTable) => string;
- //printer helpers
- function Number(length: number): CellPrinter;
- function RightPadder(char: string): CellPrinter;
- function LeftPadder(char: string): CellPrinter;
+ interface PrintColumnOptions {
+ /**
+ * Column separation string
+ */
+ separator?: string;
+ /**
+ * Printer to format column names
+ */
+ namePrinter?: CellPrinter;
+ }
- interface CellPrinter extends Function {
- (obj: any, cell: (label: string, value: any, width?: number) => void):string;
- }
- interface Printer extends Function {
- (table: EasyTable):string;
- }
- interface Accumulator extends Function {
- (sum: number, val: number, index: number, length: number):number;
- }
+ interface Aggregators {
+ /**
+ * Create a printer which formats the value with `printer`,
+ * adds the `prefix` to it and right aligns the whole thing
+ *
+ * @param {String} prefix
+ * @param {Function} printer
+ * @returns {printer}
+ */
+ printer(prefix: string, printer: CellPrinter): CellPrinter;
+ /**
+ * Sum reduction
+ */
+ sum: any;
+ /**
+ * Average reduction
+ */
+ avg: any;
+ }
+
+ interface TotalOptions {
+ /**
+ * reduce(acc, val, idx, length) function to compute the total value
+ */
+ reduce?: ReduceFunction;
+ /**
+ * Printer to format the total cell
+ */
+ printer?: CellPrinter;
+ /**
+ * Initial value for reduction
+ */
+ init?: T;
+ }
+
+ interface FormatObject {
+ [key: string]: ColumnFormat;
+ }
+
+ interface ColumnFormat {
+ name?: string;
+ printer?: CellPrinter
}
export = EasyTable;
diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts
index 59e429a76..6f162e8c4 100644
--- a/localForage/localForage-tests.ts
+++ b/localForage/localForage-tests.ts
@@ -52,4 +52,14 @@ declare var localForage: LocalForage;
localForage.removeItem("key").then(() => {
});
-}
+
+ var config = localForage.config({
+ name: "testyo",
+ driver: localForage.LOCALSTORAGE
+ });
+
+ var store = localForage.createInstance({
+ name: "da instance",
+ driver: localForage.LOCALSTORAGE
+ });
+}
\ No newline at end of file
diff --git a/localForage/localForage.d.ts b/localForage/localForage.d.ts
index d169d01e3..cd12bb4f3 100644
--- a/localForage/localForage.d.ts
+++ b/localForage/localForage.d.ts
@@ -6,7 +6,7 @@
///
interface LocalForageOptions {
- driver?: LocalForageDriver | LocalForageDriver[];
+ driver?: string | LocalForageDriver | LocalForageDriver[];
name?: string;
@@ -46,9 +46,19 @@ interface LocalForage {
WEBSQL: string;
INDEXEDDB: string;
- config(options: LocalForageOptions): void;
+ /**
+ * Set and persist localForage options. This must be called before any other calls to localForage are made, but can be called after localForage is loaded.
+ * If you set any config values with this method they will persist after driver changes, so you can call config() then setDriver()
+ * @param {ILocalForageConfig} options?
+ */
+ config(options: LocalForageOptions): boolean;
+ createInstance(options: LocalForageOptions): LocalForage;
driver(): LocalForageDriver;
+ /**
+ * Force usage of a particular driver or drivers, if available.
+ * @param {string} driver
+ */
setDriver(driver: string | string[]): Promise;
setDriver(driver: string | string[], callback: () => void, errorCallback: (error: any) => void): void;
defineDriver(driver: LocalForageDriver): Promise;
@@ -79,3 +89,8 @@ interface LocalForage {
iterate(iteratee: (value: any, key: string, iterationNumber: number) => any,
callback: (err: any, result: any) => void): void;
}
+
+declare module "localforage" {
+ var localforage: LocalForage;
+ export default localforage;
+}
\ No newline at end of file
diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts
index 7dd2249c9..daa640fcb 100644
--- a/lodash/lodash-tests.ts
+++ b/lodash/lodash-tests.ts
@@ -1633,13 +1633,6 @@ result = _(0.046).floor(2);
result = _(4060).floor(-2);
// → 4000
-result = _.max([4, 2, 8, 6]);
-result = _.max(stoogesAges, function (stooge) { return stooge.age; });
-result = _.max(stoogesAges, 'age');
-result = <_.LoDashWrapper>_([4, 2, 8, 6]).max();
-result = <_.LoDashWrapper>_(stoogesAges).max(function (stooge) { return stooge.age; });
-result = <_.LoDashWrapper>_(stoogesAges).max('age');
-
result = _.min([4, 2, 8, 6]);
result = _.min(stoogesAges, function (stooge) { return stooge.age; });
result = _.min(stoogesAges, 'age');
@@ -1988,23 +1981,53 @@ result = <_.LoDashObjectWrapper<() => boolean>>_(createCallbackObj).createCallba
// _.curry
var testCurryFn = (a: number, b: number, c: number) => [a, b, c];
-interface TestCurryResultFn {
- (...args: number[]): number[] | TestCurryResultFn;
-}
-result = _.curry(testCurryFn)(1, 2, 3);
-result = _.curry(testCurryFn)(1);
-result = _(testCurryFn).curry().value()(1, 2, 3);
-result = _(testCurryFn).curry().value()(1);
+let curryResult0: number[]
+let curryResult1: _.CurriedFunction1
+let curryResult2: _.CurriedFunction2
+
+curryResult0 = _.curry(testCurryFn)(1, 2, 3);
+curryResult1 = _.curry(testCurryFn)(1, 2);
+curryResult0 = _.curry(testCurryFn)(1, 2)(3);
+curryResult0 = _.curry(testCurryFn)(1)(2)(3);
+curryResult2 = _.curry(testCurryFn)(1);
+curryResult1 = _.curry(testCurryFn)(1)(2);
+curryResult0 = _.curry(testCurryFn)(1)(2)(3);
+curryResult0 = _.curry(testCurryFn)(1)(2, 3);
+curryResult0 = _(testCurryFn).curry().value()(1, 2, 3);
+curryResult2 = _(testCurryFn).curry().value()(1);
+
+declare function testCurry2(a: string, b: number, c: boolean): [string, number, boolean];
+let curryResult3: [string, number, boolean];
+let curryResult4: _.CurriedFunction1;
+let curryResult5: _.CurriedFunction2;
+let curryResult6: _.CurriedFunction3;
+curryResult3 = _.curry(testCurry2)("1", 2, true);
+curryResult3 = _.curry(testCurry2)("1", 2)(true);
+curryResult3 = _.curry(testCurry2)("1")(2, true);
+curryResult3 = _.curry(testCurry2)("1")(2)(true);
+curryResult4 = _.curry(testCurry2)("1", 2);
+curryResult4 = _.curry(testCurry2)("1")(2);
+curryResult5 = _.curry(testCurry2)("1");
+curryResult6 = _.curry(testCurry2);
// _.curryRight
var testCurryRightFn = (a: number, b: number, c: number) => [a, b, c];
-interface TestCurryRightResultFn {
- (...args: number[]): number[] | TestCurryRightResultFn;
-}
-result = _.curryRight(testCurryRightFn)(1, 2, 3);
-result = _.curryRight(testCurryRightFn)(1);
-result = _(testCurryRightFn).curryRight().value()(1, 2, 3);
-result = _(testCurryRightFn).curryRight().value()(1);
+curryResult0 = _.curryRight(testCurryRightFn)(1, 2, 3);
+curryResult2 = _.curryRight(testCurryRightFn)(1);
+curryResult0 = _(testCurryRightFn).curryRight().value()(1, 2, 3);
+curryResult2 = _(testCurryRightFn).curryRight().value()(1);
+
+let curryResult7: _.CurriedFunction1;
+let curryResult8: _.CurriedFunction2;
+let curryResult9: _.CurriedFunction3;
+curryResult3 = _.curryRight(testCurry2)(true, 2, "1");
+curryResult3 = _.curryRight(testCurry2)(true, 2)("1");
+curryResult3 = _.curryRight(testCurry2)(true)(2, "1");
+curryResult3 = _.curryRight(testCurry2)(true)(2)("1");
+curryResult7 = _.curryRight(testCurry2)(true, 2);
+curryResult7 = _.curryRight(testCurry2)(true)(2);
+curryResult8 = _.curryRight(testCurry2)(true);
+curryResult9 = _.curryRight(testCurry2);
declare var source: any;
result = _.debounce(function () { }, 150);
@@ -2403,18 +2426,23 @@ result = _([]).lte(2);
result = _({}).lte(2);
// _.toPlainObject
-result =