diff --git a/underscore-ko/underscore-ko.d.ts b/underscore-ko/underscore-ko.d.ts
index 241a0db12..3613192c8 100644
--- a/underscore-ko/underscore-ko.d.ts
+++ b/underscore-ko/underscore-ko.d.ts
@@ -6,91 +6,117 @@
///
///
-interface KnockoutObservableArrayFunctions {
+interface KnockoutObservableArrayFunctions {
/****
Collections
*****/
- each(iterator: _.ListIterator, context?: any): any[];
- each(iterator: _.ObjectIterator, context?: any): any[];
- forEach(iterator: _.ObjectIterator, context?: any): any[];
- forEach(iterator: _.ListIterator, context?: any): any[];
+ each(iterator: _.ListIterator, context?: any): TResult[];
+ each(iterator: _.ObjectIterator, context?: any): TResult[];
+ forEach(iterator: _.ObjectIterator, context?: any): TResult[];
+ forEach(iterator: _.ListIterator, context?: any): TResult[];
- map(iterator: _.ListIterator, context?: any): any[];
- map(iterator: _.ObjectIterator, context?: any): any[];
- collect(iterator: _.ListIterator, context?: any): any[];
- collect(iterator: _.ObjectIterator, context?: any): any[];
+ map(iterator: _.ListIterator, context?: any): TResult[];
+ map(iterator: _.ObjectIterator, context?: any): TResult[];
+ collect(iterator: _.ListIterator, context?: any): TResult[];
+ collect(iterator: _.ObjectIterator, context?: any): TResult[];
- reduce(iterator: any, memo: any, context?: any): any;
- inject(iterator: any, memo: any, context?: any): any;
- foldl(iterator: any, memo: any, context?: any): any;
+ reduce(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
+ inject(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
+ foldl(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
- reduceRight(iterator: any, memo: any, context?: any): any[];
- foldr(iterator: any, memo: any, context?: any): any[];
+ reduceRight(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
+ foldr(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
- find(iterator: any, context?: any): any;
- detect(iterator: any, context?: any): any;
+ find(iterator: _.ListIterator, context?: any): T;
+ detect(iterator: _.ListIterator, context?: any): T;
- filter(iterator: any, context?: any): any[];
- select(iterator: any, context?: any): any[];
+ filter(iterator: _.ListIterator, context?: any): T[];
+ filter_(iterator: _.ListIterator, context?: any): T[];
+ select(iterator: _.ListIterator, context?: any): T[];
+ select_(iterator: _.ListIterator, context?: any): T[];
- where(properties: any): any[];
+ where(properties: U): T[];
- reject(iterator: any, context?: any): any[];
+ reject(iterator: _.ListIterator, context?: any): T[];
+ reject_(iterator: _.ListIterator, context?: any): T[];
- all(iterator: any, context?: any): bool;
- every(iterator: any, context?: any): bool;
+ all(iterator: _.ListIterator, context?: any): bool;
+ every(iterator: _.ListIterator, context?: any): bool;
- any(iterator?: any, context?: any): bool;
- some(iterator?: any, context?: any): bool;
+ any(iterator?: _.ListIterator, context?: any): bool;
+ some(iterator?: _.ListIterator, context?: any): bool;
- contains(list: any, value: any): bool;
- contains(value: any): bool;
- include(list: any, value: any): bool;
- include(value: any): bool;
+ contains(value: T): bool;
+ include(value: T): bool;
- invoke(methodName: string, arguments: any[]): any;
invoke(methodName: string, ...arguments: any[]): any;
+ invoke_(methodName: string, ...arguments: any[]): any;
- pluck(propertyName: string): string[];
- max(iterator?: any, context?: any): any;
- min(iterator?: any, context?: any): any;
- sortBy(iterator?: any, context?: any): any;
- groupBy(iterator: any): any;
- countBy(iterator: any): any;
- shuffle(): any[];
+ pluck(propertyName: string): T[];
+ max(iterator: _.ListIterator, context?: any): any;
+ min(iterator: _.ListIterator, context?: any): any;
+ sortBy(iterator: _.ListIterator, context?: any): T[];
+ sortBy(iterator: string, context?: any): T[];
+ sortBy_(iterator: _.ListIterator, context?: any): T[];
+ sortBy_(iterator: string, context?: any): T[];
+ groupBy(iterator: _.ListIterator): _.Dictionary;
+ groupBy(iterator: string): _.Dictionary;
+ groupBy_(iterator: _.ListIterator): _.Dictionary;
+ groupBy_(iterator: string): _.Dictionary;
+ countBy(iterator: _.ListIterator): _.Dictionary;
+ countBy(iterator: string): _.Dictionary;
+ shuffle(): T[];
+ shuffle_(): T[];
size(): number;
/****
Arrays
*****/
- first(n?: number): any;
- head(n?: number): any;
- take(n?: number): any;
+ first(): T;
+ first(n: number): T[];
+ head(): T;
+ head(n: number): T[];
+ take(): T;
+ take(n: number): T[];
- initial(n?: number): any[];
+ initial(n?: number): T[];
- last(n?: number): any;
+ last(): T;
+ last(n: number): T[];
- rest(n?: number): any[];
- tail(n?: number): any[];
- drop(n?: number): any[];
+ rest(n?: number): T[];
+ rest_(n?: number): T[];
+ tail(n?: number): T[];
+ tail_(n?: number): T[];
+ drop(n?: number): T[];
+ drop_(n?: number): T[];
- compact(): any[];
+ compact(): T[];
+ compact_(): T[];
flatten(shallow?: bool): any[];
- without(...values: any[]): any[];
- union(...arrays: any[][]): any[];
- intersection(...arrays: any[][]): any[];
- difference(...others: any[][]): any[];
+ flatten_(shallow?: bool): any[];
+ without(...values: T[]): T[];
+ without_(...values: T[]): T[];
+ union(...arrays: T[][]): T[];
+ union_(...arrays: T[][]): T[];
+ intersection(...arrays: T[][]): T[];
+ intersection_(...arrays: T[][]): T[];
+ difference(...others: T[][]): T[];
+ difference_(...others: T[][]): T[];
- uniq(isSorted?: bool, iterator?: any): any[];
- unique(isSorted?: bool, iterator?: any): any[];
+ uniq(isSorted?: bool, iterator?: _.ListIterator): T[];
+ uniq_(isSorted?: bool, iterator?: _.ListIterator): T[];
+ unique(isSorted?: bool, iterator?: _.ListIterator): T[];
+ unique_(isSorted?: bool, iterator?: _.ListIterator): T[];
zip(...arrays: any[]): any[];
- object(values?: any[]): any;
- indexOf(value: any, isSorted?: bool): number;
- lastIndexOf(value: any, fromIndex?: number): number;
- sortedIndex(valueL: any, iterator?: any): number;
+ zip_(...arrays: any[]): any[];
+ object(): any;
+ indexOf(value: T, isSorted?: bool): number;
+ lastIndexOf(value: T, fromIndex?: number): number;
+ lastIndexOf(value: T, isSorted?: boolean): number;
+ sortedIndex(value: T, iterator?: _.ListIterator): number;
range(stop: number): any[];
range(start: number, stop: number, step?: number): any[];