// Type definitions for Underscore-ko 1.2.2 with underscore 1.4
// Project: https://github.com/kamranayub/UnderscoreKO
// Definitions by: Maurits Elbers
// Definitions: https://github.com/borisyankov/DefinitelyTyped
///
///
interface KnockoutObservableArrayFunctions {
/****
Collections
*****/
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): TResult[];
map(iterator: _.ObjectIterator, context?: any): TResult[];
collect(iterator: _.ListIterator, context?: any): TResult[];
collect(iterator: _.ObjectIterator, context?: any): TResult[];
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: _.MemoIterator, memo: TResult, context?: any): TResult;
foldr(iterator: _.MemoIterator, memo: TResult, context?: any): TResult;
find(iterator: _.ListIterator, context?: any): T;
detect(iterator: _.ListIterator, context?: any): T;
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: U): T[];
reject(iterator: _.ListIterator, context?: any): T[];
reject_(iterator: _.ListIterator, context?: any): T[];
all(iterator: _.ListIterator, context?: any): boolean;
every(iterator: _.ListIterator, context?: any): boolean;
any(iterator?: _.ListIterator, context?: any): boolean;
some(iterator?: _.ListIterator, context?: any): boolean;
contains(value: T): boolean;
include(value: T): boolean;
invoke(methodName: string, ...arguments: any[]): any;
invoke_(methodName: string, ...arguments: any[]): 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(): T;
first(n: number): T[];
head(): T;
head(n: number): T[];
take(): T;
take(n: number): T[];
initial(n?: number): T[];
last(): T;
last(n: number): T[];
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(): T[];
compact_(): T[];
flatten(shallow?: boolean): any[];
flatten_(shallow?: boolean): 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?: boolean, iterator?: _.ListIterator): T[];
uniq_(isSorted?: boolean, iterator?: _.ListIterator): T[];
unique(isSorted?: boolean, iterator?: _.ListIterator): T[];
unique_(isSorted?: boolean, iterator?: _.ListIterator): T[];
zip(...arrays: any[]): any[];
zip_(...arrays: any[]): any[];
object(): any;
indexOf(value: T, isSorted?: boolean): 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[];
/****
Chaining
*****/
chain(object: any): any;
}