diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index 470a13a91..390af5303 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -1938,41 +1938,51 @@ module TestMapKeys { result = _(dictionary).mapKeys({}).value(); } -var mergeNames = { - 'stooges': [ - { 'name': 'moe' }, - { 'name': 'larry' } - ] -}; +// _.merge +module TestMerge { + let customizer: (value: any, srcValue: any, key?: string, object?: {}, source?: {}) => any; + let result: TResult; -var mergeAges = { - 'stooges': [ - { 'age': 40 }, - { 'age': 50 } - ] -}; + result = _.merge<{}, {}, TResult>({}, {}); + result = _.merge<{}, {}, TResult>({}, {}, customizer); + result = _.merge<{}, {}, TResult>({}, {}, customizer, any); -result = _.merge(mergeNames, mergeAges); + result = _.merge<{}, {}, {}, TResult>({}, {}, {}); + result = _.merge<{}, {}, {}, TResult>({}, {}, {}, customizer); + result = _.merge<{}, {}, {}, TResult>({}, {}, {}, customizer, any); -var mergeFood = { - 'fruits': ['apple'], - 'vegetables': ['beet'] -}; + result = _.merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}); + result = _.merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}, customizer); + result = _.merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}, customizer, any); -var mergeOtherFood: { [index: string]: string[] } = { - 'fruits': ['banana'], - 'vegetables': ['carrot'] -}; + result = _.merge<{}, {}, {}, {}, {}, TResult>({}, {}, {}, {}, {}); + result = _.merge<{}, {}, {}, {}, {}, TResult>({}, {}, {}, {}, {}, customizer); + result = _.merge<{}, {}, {}, {}, {}, TResult>({}, {}, {}, {}, {}, customizer, any); -interface FruitVeg { - [index: string]: string[]; - fruits: string[]; - vegetables: string[] -}; + result = _.merge<{}, TResult>({}, {}, {}, {}, {}, {}); + result = _.merge<{}, TResult>({}, {}, {}, {}, {}, {}, customizer); + result = _.merge<{}, TResult>({}, {}, {}, {}, {}, {}, customizer, any); -result = _.merge(mergeFood, mergeOtherFood, function (a: any, b: any) { - return _.isArray(a) ? a.concat(b) : undefined; -}); + result = _({}).merge<{}, TResult>({}).value(); + result = _({}).merge<{}, TResult>({}, customizer).value(); + result = _({}).merge<{}, TResult>({}, customizer, any).value(); + + result = _({}).merge<{}, {}, TResult>({}, {}).value(); + result = _({}).merge<{}, {}, TResult>({}, {}, customizer).value(); + result = _({}).merge<{}, {}, TResult>({}, {}, customizer, any).value(); + + result = _({}).merge<{}, {}, {}, TResult>({}, {}, {}).value(); + result = _({}).merge<{}, {}, {}, TResult>({}, {}, {}, customizer).value(); + result = _({}).merge<{}, {}, {}, TResult>({}, {}, {}, customizer, any).value(); + + result = _({}).merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}).value(); + result = _({}).merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}, customizer).value(); + result = _({}).merge<{}, {}, {}, {}, TResult>({}, {}, {}, {}, customizer, any).value(); + + result = _({}).merge({}, {}, {}, {}, {}).value(); + result = _({}).merge({}, {}, {}, {}, {}, customizer).value(); + result = _({}).merge({}, {}, {}, {}, {}, customizer, any).value(); +} interface HasName { name: string; diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index 918a24d35..89d98aa74 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -7499,58 +7499,125 @@ declare module _ { } //_.merge + interface MergeCustomizer { + (value: any, srcValue: any, key?: string, object?: Object, source?: Object): any; + } + interface LoDashStatic { /** - * Recursively merges own enumerable properties of the source object(s), that don't resolve - * to undefined into the destination object. Subsequent sources will overwrite property - * assignments of previous sources. If a callback is provided it will be executed to produce - * the merged values of the destination and source properties. If the callback returns undefined - * merging will be handled by the method instead. The callback is bound to thisArg and invoked - * with two arguments; (objectValue, sourceValue). - * @param object The destination object. - * @param s1-8 The source object(s) - * @param callback The function to customize merging properties. - * @param thisArg The this binding of callback. - * @return The destination object. - **/ - merge( - object: T, - s1: S1, - callback?: (objectValue: Value, sourceValue: Value) => Value, - thisArg?: any): Result; + * Recursively merges own enumerable properties of the source object(s), that don’t resolve to undefined into + * the destination object. Subsequent sources overwrite property assignments of previous sources. If customizer + * is provided it’s invoked to produce the merged values of the destination and source properties. If + * customizer returns undefined merging is handled by the method instead. The customizer is bound to thisArg + * and invoked with five arguments: (objectValue, sourceValue, key, object, source). + * + * @param object The destination object. + * @param source The source objects. + * @param customizer The function to customize assigned values. + * @param thisArg The this binding of customizer. + * @return Returns object. + */ + merge( + object: TObject, + source: TSource, + customizer?: MergeCustomizer, + thisArg?: any + ): TResult; /** - * @see _.merge - **/ - merge( - object: T, - s1: S1, - s2: S2, - callback?: (objectValue: Value, sourceValue: Value) => Value, - thisArg?: any): Result; + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + customizer?: MergeCustomizer, + thisArg?: any + ): TResult; /** - * @see _.merge - **/ - merge( - object: T, - s1: S1, - s2: S2, - s3: S3, - callback?: (objectValue: Value, sourceValue: Value) => Value, - thisArg?: any): Result; + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: MergeCustomizer, + thisArg?: any + ): TResult; /** - * @see _.merge - **/ - merge( - object: T, - s1: S1, - s2: S2, - s3: S3, - s4: S4, - callback?: (objectValue: Value, sourceValue: Value) => Value, - thisArg?: any): Result; + * @see _.merge + */ + merge( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: MergeCustomizer, + thisArg?: any + ): TResult; + + /** + * @see _.merge + */ + merge( + object: TObject, + ...otherArgs: any[] + ): TResult; + } + + interface LoDashObjectWrapper { + /** + * @see _.merge + */ + merge( + source: TSource, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashObjectWrapper; + + /** + * @see _.merge + */ + merge( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer?: MergeCustomizer, + thisArg?: any + ): LoDashObjectWrapper; + + /** + * @see _.merge + */ + merge( + ...otherArgs: any[] + ): LoDashObjectWrapper; } //_.omit