diff --git a/underscore/underscore-tests.ts b/underscore/underscore-tests.ts index 17398a3dd1..97aaf0cbf0 100644 --- a/underscore/underscore-tests.ts +++ b/underscore/underscore-tests.ts @@ -215,7 +215,6 @@ _.mixin({ return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase(); } }); -_("fabio").capitalize(); _.uniqueId('contact_'); diff --git a/underscore/underscore.d.ts b/underscore/underscore.d.ts index 414c7653bd..d0ad26e1b1 100644 --- a/underscore/underscore.d.ts +++ b/underscore/underscore.d.ts @@ -3,15 +3,11 @@ // Definitions by: Boris Yankov // Definitions: https://github.com/borisyankov/DefinitelyTyped -declare function _(value): any; +declare function _(value: Array): _; +declare function _(value: T): _; declare module _ { - interface UnderscoreWrappedObject { - value(): any; - filter(arg?): any; - } - interface TemplateSettings { evaluate?: RegExp; interpolate?: RegExp; @@ -81,7 +77,6 @@ declare module _ { export function pluck(list: Collection, propertyName: string): any[]; export function max(list: Collection, iterator?: (x: T) => any, context?: any): T; - export function min(list: Collection, iterator?: (x: T) => any, context?: any): T; export function sortBy(list: List, iterator?: (x: T) => any, context?: any): T[]; @@ -116,18 +111,18 @@ declare module _ { export function take(array: List, n: number): T[]; export function initial(array: List, n?: number): T[]; - + export function last(array: List): T; export function last(array: List, n: number): T[]; - + export function rest(array: List, n?: number): T[]; export function tail(array: List, n?: number): T[]; export function drop(array: List, n?: number): T[]; - + export function compact(array: List): T[]; export function flatten(array: any[], shallow?: boolean): any[]; - + export function without(array: List, ...values: T[]): T[]; export function union(...arrays: List[]): T[]; @@ -138,18 +133,18 @@ declare module _ { export function uniq(array: List, isSorted?: boolean, iterator?: (x: T) => any): T[]; export function unique(array: List, isSorted?: boolean, iterator?: (x: T) => any): T[]; - + export function zip(...arrays: any[]): any[]; export function object(list: any[], values?: any): any; - + export function indexOf(array: List, value: T, isSorted?: boolean): number; export function indexOf(array: List, value: T, startFrom: number): number; export function lastIndexOf(array: List, value: T, fromIndex?: number): number; - + export function sortedIndex(list: List, value: T, iterator?: (x: T) => any, context?: any): number; - + export function range(stop: number): any[]; export function range(start: number, stop: number, step?: number): any[]; @@ -168,7 +163,7 @@ declare module _ { export function after(count: number, func: any): any; export function wrap(func: (...as: any[]) => any, wrapper: any): () => any; export function compose(...functions: any[]): any; - + /**** Objects *****/ @@ -179,10 +174,12 @@ declare module _ { export function functions(object: any): string[]; export function methods(object: any): string[]; export function extend(destination: any, ...sources: any[]): any; + export function pick(object: any, keys: string[]): any; export function pick(object: any, ...keys: string[]): any; + export function omit(object: any, keys: string[]): any; export function omit(object: any, ...keys: string[]): any; export function defaults(object: any, ...defaults: any[]): any; - export function clone(object: any): any; + export function clone(object: T): T; export function tap(object: any, interceptor: (...as: any[]) => any): any; export function has(object: any, key: string): boolean; export function isEqual(object: any, other: any): boolean; @@ -220,7 +217,169 @@ declare module _ { /**** Chaining *****/ - export function chain(object: any): UnderscoreWrappedObject; + export function chain(object): any; +} + +declare class _ { + + each(iterator: _.ListIterator, context?: any): void; + forEach(iterator: _.ListIterator, context?: any): void; + + map(iterator: _.ListIterator, context?: any): TResult[]; + collect(iterator: _.ListIterator, context?: any): TResult[]; + + reduce(iterator: (prev: TResult, curr: T) => TResult, memo: TResult, context?: any): TResult; + inject(iterator: (prev: TResult, curr: T) => TResult, memo: TResult, context?: any): TResult; + + reduceRight(iterator: (prev: TResult, curr: T) => TResult, memo: TResult, context?: any): TResult; + foldr(iterator: (prev: TResult, curr: T) => TResult, memo: TResult, context?: any): TResult; + + find(iterator: (x: T) => boolean, context?: any): T; + detect(iterator: (x: T) => boolean, context?: any): T; + + filter(iterator: (x: T) => boolean, context?: any): T[]; + select(iterator: (x: T) => boolean, context?: any): T[]; + + where(properties: any): T[]; + + reject(iterator: (x: T) => boolean, context?: any): T[]; + + all(iterator: (x: T) => boolean, context?: any): boolean; + every(iterator: (x: T) => boolean, context?: any): boolean; + + any(iterator?: (x: T) => boolean, context?: any): boolean; + some(iterator?: (x: T) => boolean, context?: any): boolean; + + contains(value: T): boolean; + include(value: T): boolean; + + invoke(methodName: string, ...arguments: any[]): any; + + pluck(propertyName: string): any[]; + + max(iterator?: (x: T) => any, context?: any): T; + min(iterator?: (x: T) => any, context?: any): T; + + sortBy(iterator?: (x: T) => any, context?: any): T[]; + sortBy(iterator: string, context?: any): T[]; + + groupBy(iterator?: (x: T) => any, context?: any): _.Dictionary<_.List>; + groupBy(iterator: string, context?: any): _.Dictionary<_.List>; + + countBy(iterator?: (x: T) => any, context?: any): _.Dictionary<_.List>; + countBy(iterator: string, context?: any): _.Dictionary<_.List>; + + shuffle(): T[]; + + toArray(): T[]; + + size(): number; + + /**** + Arrays + *****/ + first(n?: number): T[]; + head(n?: number): T[]; + take(n?: number): T[]; + initial(n?: number): T[]; + last(n?: number): T[]; + rest(n?: number): T[]; + tail(n?: number): T[]; + drop(n?: number): T[]; + + compact(): T[]; + + flatten(shallow?: boolean): any[]; + + without(...values: T[]): T[]; + + union(...arrays: _.List[]): T[]; + + intersection(...arrays: _.List[]): T[]; + + difference(...others: _.List[]): T[]; + + uniq(isSorted?: boolean, iterator?: (x: T) => any): T[]; + unique(isSorted?: boolean, iterator?: (x: T) => any): T[]; + + zip(...arrays: any[]): any[]; + + object(values?: any): any; + + indexOf(value: T, isSorted?: boolean): number; + indexOf(value: T, startFrom: number): number; + + lastIndexOf(value: T, fromIndex?: number): number; + + sortedIndex(value: T, iterator?: (x: T) => any, context?: any): number; + + /**** + Functions + *****/ + bind(func: (...as: any[]) => any, context: any, ...arguments: any[]): () => any; + bindAll(...methodNames: string[]): any; + memoize(hashFunction?: any): any; + defer(); + delay(wait: number, ...arguments: any[]): any; + delay(...arguments: any[]): any; + throttle(wait: number): any; + debounce(wait: number, immediate?: boolean): any; + once(): any; + after(func: any): any; + wrap(wrapper: any): () => any; + compose(...functions: any[]): any; + + /**** + Objects + *****/ + keys(): string[]; + values(): T[]; + pairs(): any[]; + invert(): any; + functions(): string[]; + methods(): string[]; + extend(...sources: any[]): any; + pick(keys: string[]): any; + pick(...keys: string[]): any; + omit(keys: string[]): any; + omit(...keys: string[]): any; + defaults(...defaults: any[]): any; + clone(): T; + tap(interceptor: (...as: any[]) => any): any; + has(key: string): boolean; + isEqual(other: any): boolean; + isEmpty(): boolean; + isElement(): boolean; + isArray(): boolean; + isObject(): boolean; + isArguments(): boolean; + isFunction(): boolean; + isString(): boolean; + isNumber(): boolean; + isFinite(): boolean; + isBoolean(): boolean; + isDate(): boolean; + isRegExp(): boolean; + isNaN(): boolean; + isNull(): boolean; + isUndefined(): boolean; + + /**** + Utility + *****/ + identity(): any; + times(iterator: (index: number) => void , context?: any): void; + random(max: number): number; + mixin(): void; + uniqueId(): string; + escape(): string; + result(property: string): any; + template(data?: any, settings?: any): (...data: any[]) => string; + + /**** + Chaining + *****/ + chain(): any; } declare module "underscore" {