//// [tests/cases/compiler/underscoreTest1.ts] //// //// [underscoreTest1_underscore.ts] interface Dictionary { [x: string]: T; } interface Iterator { (value: T, index: any, list: any): U; } interface Reducer { (accumulator: U, value: T, index: any, list: any): U; } interface Tuple2 extends Array { 0: T0; 1: T1; } interface Tuple3 extends Array { 0: T0; 1: T1; 2: T2; } interface Tuple4 extends Array { 0: T0; 1: T1; 2: T2; 3: T3; } module Underscore { export interface WrappedObject { keys(): string[]; values(): any[]; pairs(): any[][]; invert(): any; functions(): string[]; methods(): string[]; extend(...sources: any[]): T; pick(...keys: string[]): T; omit(...keys: string[]): T; defaults(...defaults: any[]): T; clone(): T; tap(interceptor: (object: T) => void): T; has(key: string): boolean; isEqual(other: T): 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; value(): T; } export interface WrappedFunction extends WrappedObject { bind(object: any): T; bind(object: any, ...args: any[]): Function; bindAll(...methodNames: string[]): T; partial(...args: any[]): Function; memoize(hashFunction?: Function): T; delay(wait: number, ...args: any[]): number; defer(...args: any[]): number; throttle(wait: number): T; debounce(wait: number, immediate?: boolean): T; once(): T; wrap(wrapper: (func: T, ...args: any[]) => any): T; compose(...funcs: Function[]): Function; } export interface WrappedArray extends WrappedObject> { each(iterator: Iterator, context?: any): void; forEach(iterator: Iterator, context?: any): void; map(iterator: Iterator, context?: any): U[]; collect(iterator: Iterator, context?: any): U[]; reduce(iterator: Reducer, initialValue?: T, context?: any): T; reduce(iterator: Reducer, initialValue: U, context?: any): U; foldl(iterator: Reducer, initialValue?: T, context?: any): T; foldl(iterator: Reducer, initialValue: U, context?: any): U; inject(iterator: Reducer, initialValue?: T, context?: any): T; inject(iterator: Reducer, initialValue: U, context?: any): U; reduceRight(iterator: Reducer, initialValue?: T, context?: any): T; reduceRight(iterator: Reducer, initialValue: U, context?: any): U; foldr(iterator: Reducer, initialValue?: T, context?: any): T; foldr(iterator: Reducer, initialValue: U, context?: any): U; find(iterator: Iterator, context?: any): T; detect(iterator: Iterator, context?: any): T; filter(iterator: Iterator, context?: any): T[]; select(iterator: Iterator, context?: any): T[]; where(properties: Object): T[]; findWhere(properties: Object): T; reject(iterator: Iterator, context?: any): T[]; every(iterator?: Iterator, context?: any): boolean; all(iterator?: Iterator, context?: any): boolean; some(iterator?: Iterator, context?: any): boolean; any(iterator?: Iterator, context?: any): boolean; contains(value: T): boolean; include(value: T): boolean; invoke(methodName: string, ...args: any[]): any[]; pluck(propertyName: string): any[]; max(iterator?: Iterator, context?: any): T; min(iterator?: Iterator, context?: any): T; sortBy(iterator: Iterator, context?: any): T[]; sortBy(propertyName: string): T[]; groupBy(iterator?: Iterator, context?: any): Dictionary; groupBy(propertyName: string): Dictionary; countBy(iterator?: Iterator, context?: any): Dictionary; countBy(propertyName: string): Dictionary; shuffle(): T[]; toArray(): T[]; size(): number; first(): T; first(count: number): T[]; head(): T; head(count: number): T[]; take(): T; take(count: number): T[]; initial(): T; initial(count: number): T[]; last(): T; last(count: number): T[]; rest(index?: number): T[]; compact(): T[]; flatten(shallow?: boolean): U[]; without(...values: T[]): T[]; union(...arrays: T[][]): T[]; intersection(...arrays: T[][]): T[]; difference(...others: T[][]): T[]; uniq(isSorted?: boolean): T[]; uniq(isSorted: boolean, iterator: Iterator, context?: any): U[]; unique(isSorted?: boolean): T[]; unique(isSorted: boolean, iterator: Iterator, context?: any): U[]; zip(...arrays: any[][]): any[][]; object(): any; object(values: any[]): any; indexOf(value: T, isSorted?: boolean): number; lastIndexOf(value: T, fromIndex?: number): number; sortedIndex(obj: T, propertyName: string): number; sortedIndex(obj: T, iterator?: Iterator, context?: any): number; // Methods from Array concat(...items: T[]): T[]; join(separator?: string): string; pop(): T; push(...items: T[]): number; reverse(): T[]; shift(): T; slice(start: number, end?: number): T[]; sort(compareFn?: (a: T, b: T) => number): T[]; splice(start: number): T[]; splice(start: number, deleteCount: number, ...items: T[]): T[]; unshift(...items: T[]): number; } export interface WrappedDictionary extends WrappedObject> { each(iterator: Iterator, context?: any): void; forEach(iterator: Iterator, context?: any): void; map(iterator: Iterator, context?: any): U[]; collect(iterator: Iterator, context?: any): U[]; reduce(iterator: Reducer, initialValue?: T, context?: any): T; reduce(iterator: Reducer, initialValue: U, context?: any): U; foldl(iterator: Reducer, initialValue?: T, context?: any): T; foldl(iterator: Reducer, initialValue: U, context?: any): U; inject(iterator: Reducer, initialValue?: T, context?: any): T; inject(iterator: Reducer, initialValue: U, context?: any): U; reduceRight(iterator: Reducer, initialValue?: T, context?: any): T; reduceRight(iterator: Reducer, initialValue: U, context?: any): U; foldr(iterator: Reducer, initialValue?: T, context?: any): T; foldr(iterator: Reducer, initialValue: U, context?: any): U; find(iterator: Iterator, context?: any): T; detect(iterator: Iterator, context?: any): T; filter(iterator: Iterator, context?: any): T[]; select(iterator: Iterator, context?: any): T[]; where(properties: Object): T[]; findWhere(properties: Object): T; reject(iterator: Iterator, context?: any): T[]; every(iterator?: Iterator, context?: any): boolean; all(iterator?: Iterator, context?: any): boolean; some(iterator?: Iterator, context?: any): boolean; any(iterator?: Iterator, context?: any): boolean; contains(value: T): boolean; include(value: T): boolean; invoke(methodName: string, ...args: any[]): any[]; pluck(propertyName: string): any[]; max(iterator?: Iterator, context?: any): T; min(iterator?: Iterator, context?: any): T; sortBy(iterator: Iterator, context?: any): T[]; sortBy(propertyName: string): T[]; groupBy(iterator?: Iterator, context?: any): Dictionary; groupBy(propertyName: string): Dictionary; countBy(iterator?: Iterator, context?: any): Dictionary; countBy(propertyName: string): Dictionary; shuffle(): T[]; toArray(): T[]; size(): number; } export interface ChainedObject { keys(): ChainedArray; values(): ChainedArray; pairs(): ChainedArray; invert(): ChainedObject; functions(): ChainedArray; methods(): ChainedArray; extend(...sources: any[]): ChainedObject; pick(...keys: string[]): ChainedObject; omit(...keys: string[]): ChainedObject; defaults(...defaults: any[]): ChainedObject; clone(): ChainedObject; tap(interceptor: (object: T) => void): ChainedObject; has(key: string): ChainedObject; isEqual(other: T): ChainedObject; isEmpty(): ChainedObject; isElement(): ChainedObject; isArray(): ChainedObject; isObject(): ChainedObject; isArguments(): ChainedObject; isFunction(): ChainedObject; isString(): ChainedObject; isNumber(): ChainedObject; isFinite(): ChainedObject; isBoolean(): ChainedObject; isDate(): ChainedObject; isRegExp(): ChainedObject; isNaN(): ChainedObject; isNull(): ChainedObject; isUndefined(): ChainedObject; value(): T; } export interface ChainedArray extends ChainedObject> { each(iterator: Iterator, context?: any): ChainedObject; forEach(iterator: Iterator, context?: any): ChainedObject; map(iterator: Iterator, context?: any): ChainedArray; collect(iterator: Iterator, context?: any): ChainedArray; reduce(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; reduce(iterator: Reducer, initialValue: U, context?: any): ChainedObject; foldl(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; foldl(iterator: Reducer, initialValue: U, context?: any): ChainedObject; inject(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; inject(iterator: Reducer, initialValue: U, context?: any): ChainedObject; reduceRight(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; reduceRight(iterator: Reducer, initialValue: U, context?: any): ChainedObject; foldr(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; foldr(iterator: Reducer, initialValue: U, context?: any): ChainedObject; find(iterator: Iterator, context?: any): ChainedObject; detect(iterator: Iterator, context?: any): ChainedObject; filter(iterator: Iterator, context?: any): ChainedArray; select(iterator: Iterator, context?: any): ChainedArray; where(properties: Object): ChainedArray; findWhere(properties: Object): ChainedObject; reject(iterator: Iterator, context?: any): ChainedArray; every(iterator?: Iterator, context?: any): ChainedObject; all(iterator?: Iterator, context?: any): ChainedObject; some(iterator?: Iterator, context?: any): ChainedObject; any(iterator?: Iterator, context?: any): ChainedObject; contains(value: T): ChainedObject; include(value: T): ChainedObject; invoke(methodName: string, ...args: any[]): ChainedArray; pluck(propertyName: string): ChainedArray; max(iterator?: Iterator, context?: any): ChainedObject; min(iterator?: Iterator, context?: any): ChainedObject; sortBy(iterator: Iterator, context?: any): ChainedArray; sortBy(propertyName: string): ChainedArray; // Should return ChainedDictionary, but expansive recursion not allowed groupBy(iterator?: Iterator, context?: any): ChainedDictionary; groupBy(propertyName: string): ChainedDictionary; countBy(iterator?: Iterator, context?: any): ChainedDictionary; countBy(propertyName: string): ChainedDictionary; shuffle(): ChainedArray; toArray(): ChainedArray; size(): ChainedObject; first(): ChainedObject; first(count: number): ChainedArray; head(): ChainedObject; head(count: number): ChainedArray; take(): ChainedObject; take(count: number): ChainedArray; initial(): ChainedObject; initial(count: number): ChainedArray; last(): ChainedObject; last(count: number): ChainedArray; rest(index?: number): ChainedArray; compact(): ChainedArray; flatten(shallow?: boolean): ChainedArray; without(...values: T[]): ChainedArray; union(...arrays: T[][]): ChainedArray; intersection(...arrays: T[][]): ChainedArray; difference(...others: T[][]): ChainedArray; uniq(isSorted?: boolean): ChainedArray; uniq(isSorted: boolean, iterator: Iterator, context?: any): ChainedArray; unique(isSorted?: boolean): ChainedArray; unique(isSorted: boolean, iterator: Iterator, context?: any): ChainedArray; zip(...arrays: any[][]): ChainedArray; object(): ChainedObject; object(values: any[]): ChainedObject; indexOf(value: T, isSorted?: boolean): ChainedObject; lastIndexOf(value: T, fromIndex?: number): ChainedObject; sortedIndex(obj: T, propertyName: string): ChainedObject; sortedIndex(obj: T, iterator?: Iterator, context?: any): ChainedObject; // Methods from Array concat(...items: T[]): ChainedArray; join(separator?: string): ChainedObject; pop(): ChainedObject; push(...items: T[]): ChainedObject; reverse(): ChainedArray; shift(): ChainedObject; slice(start: number, end?: number): ChainedArray; sort(compareFn?: (a: T, b: T) => number): ChainedArray; splice(start: number): ChainedArray; splice(start: number, deleteCount: number, ...items: T[]): ChainedArray; unshift(...items: T[]): ChainedObject; // Methods from ChainedObject with promoted return types extend(...sources: any[]): ChainedArray; pick(...keys: string[]): ChainedArray; omit(...keys: string[]): ChainedArray; defaults(...defaults: any[]): ChainedArray; clone(): ChainedArray; tap(interceptor: (object: T[]) => void): ChainedArray; } export interface ChainedDictionary extends ChainedObject> { each(iterator: Iterator, context?: any): ChainedObject; forEach(iterator: Iterator, context?: any): ChainedObject; map(iterator: Iterator, context?: any): ChainedArray; collect(iterator: Iterator, context?: any): ChainedArray; reduce(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; reduce(iterator: Reducer, initialValue: U, context?: any): ChainedObject; foldl(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; foldl(iterator: Reducer, initialValue: U, context?: any): ChainedObject; inject(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; inject(iterator: Reducer, initialValue: U, context?: any): ChainedObject; reduceRight(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; reduceRight(iterator: Reducer, initialValue: U, context?: any): ChainedObject; foldr(iterator: Reducer, initialValue?: T, context?: any): ChainedObject; foldr(iterator: Reducer, initialValue: U, context?: any): ChainedObject; find(iterator: Iterator, context?: any): ChainedObject; detect(iterator: Iterator, context?: any): ChainedObject; filter(iterator: Iterator, context?: any): ChainedArray; select(iterator: Iterator, context?: any): ChainedArray; where(properties: Object): ChainedArray; findWhere(properties: Object): ChainedObject; reject(iterator: Iterator, context?: any): ChainedArray; every(iterator?: Iterator, context?: any): ChainedObject; all(iterator?: Iterator, context?: any): ChainedObject; some(iterator?: Iterator, context?: any): ChainedObject; any(iterator?: Iterator, context?: any): ChainedObject; contains(value: T): ChainedObject; include(value: T): ChainedObject; invoke(methodName: string, ...args: any[]): ChainedArray; pluck(propertyName: string): ChainedArray; max(iterator?: Iterator, context?: any): ChainedObject; min(iterator?: Iterator, context?: any): ChainedObject; sortBy(iterator: Iterator, context?: any): ChainedArray; sortBy(propertyName: string): ChainedArray; // Should return ChainedDictionary, but expansive recursion not allowed groupBy(iterator?: Iterator, context?: any): ChainedDictionary; groupBy(propertyName: string): ChainedDictionary; countBy(iterator?: Iterator, context?: any): ChainedDictionary; countBy(propertyName: string): ChainedDictionary; shuffle(): ChainedArray; toArray(): ChainedArray; size(): ChainedObject; // Methods from ChainedObject with promoted return types extend(...sources: any[]): ChainedDictionary; pick(...keys: string[]): ChainedDictionary; omit(...keys: string[]): ChainedDictionary; defaults(...defaults: any[]): ChainedDictionary; clone(): ChainedDictionary; tap(interceptor: (object: Dictionary) => void): ChainedDictionary; } export interface TemplateSettings { evaluate?: RegExp; interpolate?: RegExp; escape?: RegExp; } export interface Static { (list: T[]): WrappedArray; (list: Dictionary): WrappedDictionary; (func: T): WrappedFunction; (obj: T): WrappedObject; chain(list: T[]): ChainedArray; chain(list: Dictionary): ChainedDictionary; chain(obj: T): ChainedObject; each(list: T[], iterator: Iterator, context?: any): void; each(list: Dictionary, iterator: Iterator, context?: any): void; forEach(list: T[], iterator: Iterator, context?: any): void; forEach(list: Dictionary, iterator: Iterator, context?: any): void; map(list: T[], iterator: Iterator, context?: any): U[]; map(list: Dictionary, iterator: Iterator, context?: any): U[]; collect(list: T[], iterator: Iterator, context?: any): U[]; collect(list: Dictionary, iterator: Iterator, context?: any): U[]; reduce(list: T[], iterator: Reducer, initialValue?: T, context?: any): T; reduce(list: T[], iterator: Reducer, initialValue: U, context?: any): U; reduce(list: Dictionary, iterator: Reducer, initialValue?: T, context?: any): T; reduce(list: Dictionary, iterator: Reducer, initialValue: U, context?: any): U; foldl(list: T[], iterator: Reducer, initialValue?: T, context?: any): T; foldl(list: T[], iterator: Reducer, initialValue: U, context?: any): U; foldl(list: Dictionary, iterator: Reducer, initialValue?: T, context?: any): T; foldl(list: Dictionary, iterator: Reducer, initialValue: U, context?: any): U; inject(list: T[], iterator: Reducer, initialValue?: T, context?: any): T; inject(list: T[], iterator: Reducer, initialValue: U, context?: any): U; inject(list: Dictionary, iterator: Reducer, initialValue?: T, context?: any): T; inject(list: Dictionary, iterator: Reducer, initialValue: U, context?: any): U; reduceRight(list: T[], iterator: Reducer, initialValue?: T, context?: any): T; reduceRight(list: T[], iterator: Reducer, initialValue: U, context?: any): U; reduceRight(list: Dictionary, iterator: Reducer, initialValue?: T, context?: any): T; reduceRight(list: Dictionary, iterator: Reducer, initialValue: U, context?: any): U; foldr(list: T[], iterator: Reducer, initialValue?: T, context?: any): T; foldr(list: T[], iterator: Reducer, initialValue: U, context?: any): U; foldr(list: Dictionary, iterator: Reducer, initialValue?: T, context?: any): T; foldr(list: Dictionary, iterator: Reducer, initialValue: U, context?: any): U; find(list: T[], iterator: Iterator, context?: any): T; find(list: Dictionary, iterator: Iterator, context?: any): T; detect(list: T[], iterator: Iterator, context?: any): T; detect(list: Dictionary, iterator: Iterator, context?: any): T; filter(list: T[], iterator: Iterator, context?: any): T[]; filter(list: Dictionary, iterator: Iterator, context?: any): T[]; select(list: T[], iterator: Iterator, context?: any): T[]; select(list: Dictionary, iterator: Iterator, context?: any): T[]; where(list: T[], properties: Object): T[]; where(list: Dictionary, properties: Object): T[]; findWhere(list: T[], properties: Object): T; findWhere(list: Dictionary, properties: Object): T; reject(list: T[], iterator: Iterator, context?: any): T[]; reject(list: Dictionary, iterator: Iterator, context?: any): T[]; every(list: T[], iterator?: Iterator, context?: any): boolean; every(list: Dictionary, iterator?: Iterator, context?: any): boolean; all(list: T[], iterator?: Iterator, context?: any): boolean; all(list: Dictionary, iterator?: Iterator, context?: any): boolean; some(list: T[], iterator?: Iterator, context?: any): boolean; some(list: Dictionary, iterator?: Iterator, context?: any): boolean; any(list: T[], iterator?: Iterator, context?: any): boolean; any(list: Dictionary, iterator?: Iterator, context?: any): boolean; contains(list: T[], value: T): boolean; contains(list: Dictionary, value: T): boolean; include(list: T[], value: T): boolean; include(list: Dictionary, value: T): boolean; invoke(list: any[], methodName: string, ...args: any[]): any[]; invoke(list: Dictionary, methodName: string, ...args: any[]): any[]; pluck(list: any[], propertyName: string): any[]; pluck(list: Dictionary, propertyName: string): any[]; max(list: T[], iterator?: Iterator, context?: any): T; max(list: Dictionary, iterator?: Iterator, context?: any): T; min(list: T[], iterator?: Iterator, context?: any): T; min(list: Dictionary, iterator?: Iterator, context?: any): T; sortBy(list: T[], iterator: Iterator, context?: any): T[]; sortBy(list: Dictionary, iterator: Iterator, context?: any): T[]; sortBy(list: T[], propertyName: string): T[]; sortBy(list: Dictionary, propertyName: string): T[]; groupBy(list: T[], iterator?: Iterator, context?: any): Dictionary; groupBy(list: Dictionary, iterator?: Iterator, context?: any): Dictionary; groupBy(list: T[], propertyName: string): Dictionary; groupBy(list: Dictionary, propertyName: string): Dictionary; countBy(list: T[], iterator?: Iterator, context?: any): Dictionary; countBy(list: Dictionary, iterator?: Iterator, context?: any): Dictionary; countBy(list: T[], propertyName: string): Dictionary; countBy(list: Dictionary, propertyName: string): Dictionary; shuffle(list: T[]): T[]; shuffle(list: Dictionary): T[]; toArray(list: T[]): T[]; toArray(list: Dictionary): T[]; size(list: T[]): number; size(list: Dictionary): number; first(list: T[]): T; first(list: T[], count: number): T[]; head(list: T[]): T; head(list: T[], count: number): T[]; take(list: T[]): T; take(list: T[], count: number): T[]; initial(list: T[]): T; initial(list: T[], count: number): T[]; last(list: T[]): T; last(list: T[], count: number): T[]; rest(list: T[], index?: number): T[]; compact(list: T[]): T[]; flatten(list: T[][]): T[]; flatten(array: any[], shallow?: boolean): T[]; without(list: T[], ...values: T[]): T[]; union(...arrays: T[][]): T[]; intersection(...arrays: T[][]): T[]; difference(list: T[], ...others: T[][]): T[]; uniq(list: T[], isSorted?: boolean): T[]; uniq(list: T[], isSorted: boolean, iterator: Iterator, context?: any): U[]; unique(list: T[], isSorted?: boolean): T[]; unique(list: T[], isSorted: boolean, iterator: Iterator, context?: any): U[]; zip(a0: T0[], a1: T1[]): Tuple2[]; zip(a0: T0[], a1: T1[], a2: T2[]): Tuple3[]; zip(a0: T0[], a1: T1[], a2: T2[], a3: T3[]): Tuple4[]; zip(...arrays: any[][]): any[][]; object(list: any[][]): any; object(keys: string[], values: any[]): any; indexOf(list: T[], value: T, isSorted?: boolean): number; lastIndexOf(list: T[], value: T, fromIndex?: number): number; sortedIndex(list: T[], obj: T, propertyName: string): number; sortedIndex(list: T[], obj: T, iterator?: Iterator, context?: any): number; range(stop: number): number[]; range(start: number, stop: number, step?: number): number[]; bind(func: T, object: any): T; bind(func: Function, object: any, ...args: any[]): Function; bindAll(object: T, ...methodNames: string[]): T; partial(func: Function, ...args: any[]): Function; memoize(func: T, hashFunction?: Function): T; delay(func: Function, wait: number, ...args: any[]): number; defer(func: Function, ...args: any[]): number; throttle(func: T, wait: number): T; debounce(func: T, wait: number, immediate?: boolean): T; once(func: T): T; after(count: number, func: T): T; wrap(func: T, wrapper: (func: T, ...args: any[]) => any): T; compose(...funcs: Function[]): Function; keys(object: any): string[]; values(object: any): any[]; pairs(object: any): any[][]; invert(object: any): any; functions(object: any): string[]; methods(object: any): string[]; extend(destination: T, ...sources: any[]): T; pick(object: T, ...keys: string[]): T; omit(object: T, ...keys: string[]): T; defaults(object: T, ...defaults: any[]): T; clone(object: T): T; tap(object: T, interceptor: (object: T) => void): T; has(object: any, key: string): boolean; isEqual(object: T, other: T): boolean; isEmpty(object: any): boolean; isElement(object: any): boolean; isArray(object: any): boolean; isObject(value: any): boolean; isArguments(object: any): boolean; isFunction(object: any): boolean; isString(object: any): boolean; isNumber(object: any): boolean; isFinite(object: any): boolean; isBoolean(object: any): boolean; isDate(object: any): boolean; isRegExp(object: any): boolean; isNaN(object: any): boolean; isNull(object: any): boolean; isUndefined(value: any): boolean; noConflict(): Static; identity(value: T): T; times(n: number, iterator: Iterator, context?: any): U[]; random(max: number): number; random(min: number, max: number): number; mixin(object: any): void; uniqueId(): number; uniqueId(prefix: string): string; escape(s: string): string; unescape(s: string): string; result(object: any, property: string): any; templateSettings: TemplateSettings; template(templateString: string): (data: any) => string; template(templateString: string, data: any, settings?: TemplateSettings): string; } } declare var _: Underscore.Static; //// [underscoreTest1_underscoreTests.ts] /// declare var $; declare function alert(x: string): void; _.each([1, 2, 3], (num) => alert(num.toString())); _.each({ one: 1, two: 2, three: 3 }, (value: number, key?: string) => alert(value.toString())); _.map([1, 2, 3], (num) => num * 3); _.map({ one: 1, two: 2, three: 3 }, (value: number, key?: string) => value * 3); var sum = _.reduce([1, 2, 3], (memo, num) => memo + num, 0); var list = [[0, 1], [2, 3], [4, 5]]; var flat = _.reduceRight(list, (a, b) => a.concat(b), []); var even = _.find([1, 2, 3, 4, 5, 6], (num) => num % 2 == 0); var evens = _.filter([1, 2, 3, 4, 5, 6], (num) => num % 2 == 0); var listOfPlays = [{ title: "Cymbeline", author: "Shakespeare", year: 1611 }, { title: "The Tempest", author: "Shakespeare", year: 1611 }, { title: "Other", author: "Not Shakespeare", year: 2012 }]; _.where(listOfPlays, { author: "Shakespeare", year: 1611 }); var odds = _.reject([1, 2, 3, 4, 5, 6], (num) => num % 2 == 0); _.all([true, 1, null, 'yes'], _.identity); _.any([null, 0, 'yes', false]); _.contains([1, 2, 3], 3); _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); var stooges = [{ name: 'moe', age: 40 }, { name: 'larry', age: 50 }, { name: 'curly', age: 60 }]; _.pluck(stooges, 'name'); _.max(stooges, (stooge) => stooge.age); var numbers = [10, 5, 100, 2, 1000]; _.min(numbers); _.sortBy([1, 2, 3, 4, 5, 6], (num) => Math.sin(num)); // not sure how this is typechecking at all.. Math.floor(e) is number not string..? _([1.3, 2.1, 2.4]).groupBy((e: number, i?: number, list?: number[]) => Math.floor(e)); _.groupBy([1.3, 2.1, 2.4], (num: number) => Math.floor(num)); _.groupBy(['one', 'two', 'three'], 'length'); _.countBy([1, 2, 3, 4, 5], (num) => num % 2 == 0 ? 'even' : 'odd'); _.shuffle([1, 2, 3, 4, 5, 6]); // (function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4); _.size({ one: 1, two: 2, three: 3 }); /////////////////////////////////////////////////////////////////////////////////////// _.first([5, 4, 3, 2, 1]); _.initial([5, 4, 3, 2, 1]); _.last([5, 4, 3, 2, 1]); _.rest([5, 4, 3, 2, 1]); _.compact([0, 1, false, 2, '', 3]); _.flatten([1, 2, 3, 4]); _.flatten([1, [2]]); // typescript doesn't like the elements being different _.flatten([1, [2], [3, [[4]]]]); _.flatten([1, [2], [3, [[4]]]], true); _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]); _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); _.difference([1, 2, 3, 4, 5], [5, 2, 10]); _.uniq([1, 2, 1, 3, 1, 4]); _.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); _.object(['moe', 'larry', 'curly'], [30, 40, 50]); _.object([['moe', 30], ['larry', 40], ['curly', 50]]); _.indexOf([1, 2, 3], 2); _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); _.sortedIndex([10, 20, 30, 40, 50], 35); _.range(10); _.range(1, 11); _.range(0, 30, 5); _.range(0, 30, 5); _.range(0); /////////////////////////////////////////////////////////////////////////////////////// var func = function (greeting) { return greeting + ': ' + this.name }; // need a second var otherwise typescript thinks func signature is the above func type, // instead of the newly returned _bind => func type. var func2 = _.bind(func, { name: 'moe' }, 'hi'); func2(); var buttonView = { label: 'underscore', onClick: function () { alert('clicked: ' + this.label); }, onHover: function () { alert('hovering: ' + this.label); } }; _.bindAll(buttonView); $('#underscore_button').bind('click', buttonView.onClick); var fibonacci = _.memoize(function (n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }); var log = _.bind((message?: string, ...rest: string[]) => { }, Date); _.delay(log, 1000, 'logged later'); _.defer(function () { alert('deferred'); }); var updatePosition = () => alert('updating position...'); var throttled = _.throttle(updatePosition, 100); $(null).scroll(throttled); var calculateLayout = () => alert('calculating layout...'); var lazyLayout = _.debounce(calculateLayout, 300); $(null).resize(lazyLayout); var createApplication = () => alert('creating application...'); var initialize = _.once(createApplication); initialize(); initialize(); var notes: any[]; var render = () => alert("rendering..."); var renderNotes = _.after(notes.length, render); _.each(notes, (note) => note.asyncSave({ success: renderNotes })); var hello = function (name) { return "hello: " + name; }; hello = _.wrap(hello, (func, arg) => { return "before, " + func(arg) + ", after"; }); hello("moe"); var greet = function (name) { return "hi: " + name; }; var exclaim = function (statement) { return statement + "!"; }; var welcome = _.compose(exclaim, greet); welcome('moe'); /////////////////////////////////////////////////////////////////////////////////////// _.keys({ one: 1, two: 2, three: 3 }); _.values({ one: 1, two: 2, three: 3 }); _.pairs({ one: 1, two: 2, three: 3 }); _.invert({ Moe: "Moses", Larry: "Louis", Curly: "Jerome" }); _.functions(_); _.extend({ name: 'moe' }, { age: 50 }); _.pick({ name: 'moe', age: 50, userid: 'moe1' }, 'name', 'age'); _.omit({ name: 'moe', age: 50, userid: 'moe1' }, 'userid'); var iceCream = { flavor: "chocolate" }; _.defaults(iceCream, { flavor: "vanilla", sprinkles: "lots" }); _.clone({ name: 'moe' }); _.chain([1, 2, 3, 200]) .filter(function (num) { return num % 2 == 0; }) .tap(alert) .map(function (num) { return num * num }) .value(); _.has({ a: 1, b: 2, c: 3 }, "b"); var moe = { name: 'moe', luckyNumbers: [13, 27, 34] }; var clone = { name: 'moe', luckyNumbers: [13, 27, 34] }; moe == clone; _.isEqual(moe, clone); _.isEmpty([1, 2, 3]); _.isEmpty({}); _.isElement($('body')[0]); (function () { return _.isArray(arguments); })(); _.isArray([1, 2, 3]); _.isObject({}); _.isObject(1); // (() => { return _.isArguments(arguments); })(1, 2, 3); _.isArguments([1, 2, 3]); _.isFunction(alert); _.isString("moe"); _.isNumber(8.4 * 5); _.isFinite(-101); _.isFinite(-Infinity); _.isBoolean(null); _.isDate(new Date()); _.isRegExp(/moe/); _.isNaN(NaN); isNaN(undefined); _.isNaN(undefined); _.isNull(null); _.isNull(undefined); _.isUndefined((null).missingVariable); /////////////////////////////////////////////////////////////////////////////////////// var underscore = _.noConflict(); var moe2 = { name: 'moe' }; moe2 === _.identity(moe); var genie; _.times(3, function (n) { genie.grantWishNumber(n); }); _.random(0, 100); _.mixin({ capitalize: function (string) { return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase(); } }); (_("fabio")).capitalize(); _.uniqueId('contact_'); _.escape('Curly, Larry & Moe'); var object = { cheese: 'crumpets', stuff: function () { return 'nonsense'; } }; _.result(object, 'cheese'); _.result(object, 'stuff'); var compiled = _.template("hello: <%= name %>"); compiled({ name: 'moe' }); var list2 = "<% _.each(people, function(name) { %>
  • <%= name %>
  • <% }); %>"; _.template(list2, { people: ['moe', 'curly', 'larry'] }); var template = _.template("<%- value %>"); template({ value: '