diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index bc33ed1ea..deb05249e 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -7051,40 +7051,30 @@ module TestAssign { let result: {a: number}; result = _.assign(obj, s1); - result = _.assign(obj, s1, customizer); - result = _.assign(obj, s1, customizer, any); } { let result: {a: number, b: number}; result = _.assign(obj, s1, s2); - result = _.assign(obj, s1, s2, customizer); - result = _.assign(obj, s1, s2, customizer, any); } { let result: {a: number, b: number, c: number}; result = _.assign(obj, s1, s2, s3); - result = _.assign(obj, s1, s2, s3, customizer); - result = _.assign(obj, s1, s2, s3, customizer, any); } { let result: {a: number, b: number, c: number, d: number}; result = _.assign(obj, s1, s2, s3, s4); - result = _.assign(obj, s1, s2, s3, s4, customizer); - result = _.assign(obj, s1, s2, s3, s4, customizer, any); } { let result: {a: number, b: number, c: number, d: number, e: number}; result = _.assign(obj, s1, s2, s3, s4, s5); - result = _.assign(obj, s1, s2, s3, s4, s5, customizer); - result = _.assign(obj, s1, s2, s3, s4, s5, customizer, any); } { @@ -7097,40 +7087,30 @@ module TestAssign { let result: _.LoDashImplicitObjectWrapper<{a: number}>; result = _(obj).assign(s1); - result = _(obj).assign(s1, customizer); - result = _(obj).assign(s1, customizer, any); } { let result: _.LoDashImplicitObjectWrapper<{a: number, b: number}>; result = _(obj).assign(s1, s2); - result = _(obj).assign(s1, s2, customizer); - result = _(obj).assign(s1, s2, customizer, any); } { let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number}>; result = _(obj).assign(s1, s2, s3); - result = _(obj).assign(s1, s2, s3, customizer); - result = _(obj).assign(s1, s2, s3, customizer, any); } { let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number, d: number}>; result = _(obj).assign(s1, s2, s3, s4); - result = _(obj).assign(s1, s2, s3, s4, customizer); - result = _(obj).assign(s1, s2, s3, s4, customizer, any); } { let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number, d: number, e: number}>; result = _(obj).assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5); - result = _(obj).assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer); - result = _(obj).assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer, any); } { @@ -7143,40 +7123,142 @@ module TestAssign { let result: _.LoDashExplicitObjectWrapper<{a: number}>; result = _(obj).chain().assign(s1); - result = _(obj).chain().assign(s1, customizer); - result = _(obj).chain().assign(s1, customizer, any); } { let result: _.LoDashExplicitObjectWrapper<{a: number, b: number}>; result = _(obj).chain().assign(s1, s2); - result = _(obj).chain().assign(s1, s2, customizer); - result = _(obj).chain().assign(s1, s2, customizer, any); } { let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number}>; result = _(obj).chain().assign(s1, s2, s3); - result = _(obj).chain().assign(s1, s2, s3, customizer); - result = _(obj).chain().assign(s1, s2, s3, customizer, any); } { let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number, d: number}>; result = _(obj).chain().assign(s1, s2, s3, s4); - result = _(obj).chain().assign(s1, s2, s3, s4, customizer); - result = _(obj).chain().assign(s1, s2, s3, s4, customizer, any); } { let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number, d: number, e: number}>; result = _(obj).chain().assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5); - result = _(obj).chain().assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer); - result = _(obj).chain().assign<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer, any); + } +} + +// _.assignWith +module TestAssignWith { + interface Obj {a: string}; + interface S1 {a: number}; + interface S2 {b: number}; + interface S3 {c: number}; + interface S4 {d: number}; + interface S5 {e: number}; + + let obj: Obj; + let s1: S1; + let s2: S2; + let s3: S3; + let s4: S4; + let s5: S5; + + let customizer: (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any; + + { + let result: Obj; + + result = _.assignWith(obj); + } + + { + let result: {a: number}; + result = _.assignWith(obj, s1, customizer); + } + + { + let result: {a: number, b: number}; + result = _.assignWith(obj, s1, s2, customizer); + } + + { + let result: {a: number, b: number, c: number}; + result = _.assignWith(obj, s1, s2, s3, customizer); + } + + { + let result: {a: number, b: number, c: number, d: number}; + result = _.assignWith(obj, s1, s2, s3, s4, customizer); + } + + { + let result: {a: number, b: number, c: number, d: number, e: number}; + result = _.assignWith(obj, s1, s2, s3, s4, s5, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper; + + result = _(obj).assignWith(); + } + + { + let result: _.LoDashImplicitObjectWrapper<{a: number}>; + result = _(obj).assignWith(s1, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper<{a: number, b: number}>; + result = _(obj).assignWith(s1, s2, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number}>; + result = _(obj).assignWith(s1, s2, s3, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number, d: number}>; + result = _(obj).assignWith(s1, s2, s3, s4, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper<{a: number, b: number, c: number, d: number, e: number}>; + result = _(obj).assignWith<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper; + + result = _(obj).chain().assignWith(); + } + + { + let result: _.LoDashExplicitObjectWrapper<{a: number}>; + result = _(obj).chain().assignWith(s1, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper<{a: number, b: number}>; + result = _(obj).chain().assignWith(s1, s2, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number}>; + result = _(obj).chain().assignWith(s1, s2, s3, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number, d: number}>; + result = _(obj).chain().assignWith(s1, s2, s3, s4, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper<{a: number, b: number, c: number, d: number, e: number}>; + result = _(obj).chain().assignWith<{a: number, b: number, c: number, d: number, e: number}>(s1, s2, s3, s4, s5, customizer); } } diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index ec40ddac3..7c6a46754 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -81,21 +81,21 @@ added 23 array methods: added 18 lang methods: - [x] _.cloneDeepWith - [x] _.cloneWith -- [ ] _.eq +- [x] _.eq - [x] _.isArrayLike - [x] _.isArrayLikeObject - [x] _.isEqualWith -- [ ] _.isInteger -- [ ] _.isLength -- [ ] _.isMatchWith -- [ ] _.isNil -- [ ] _.isObjectLike -- [ ] _.isSafeInteger -- [ ] _.isSymbol -- [ ] _.toInteger -- [ ] _.toLength -- [ ] _.toNumber -- [ ] _.toSafeInteger +- [x] _.isInteger +- [x] _.isLength +- [x] _.isMatchWith +- [x] _.isNil +- [x] _.isObjectLike +- [x] _.isSafeInteger +- [x] _.isSymbol +- [x] _.toInteger +- [x] _.toLength +- [x] _.toNumber +- [x] _.toSafeInteger - [ ] _.toString added 13 object methods: @@ -106,8 +106,8 @@ added 13 object methods: - [ ] _.hasIn - [ ] _.invoke - [ ] _.mergeWith -- [ ] _.omitBy -- [ ] _.pickBy +- [x] _.omitBy +- [x] _.pickBy - [ ] _.setWith - [ ] _.toPairs - [ ] _.toPairsIn @@ -11472,32 +11472,40 @@ declare module _ { **********/ //_.assign - interface AssignCustomizer { - (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}): any; - } - interface LoDashStatic { /** - * Assigns own enumerable properties of source object(s) to the destination object. Subsequent sources - * overwrite property assignments of previous sources. If customizer is provided it’s invoked to produce the - * assigned values. The customizer is bound to thisArg and invoked with five arguments: - * (objectValue, sourceValue, key, object, source). + * Assigns own enumerable properties of source objects to the destination + * object. Source objects are applied from left to right. Subsequent sources + * overwrite property assignments of previous sources. * - * Note: This method mutates object and is based on Object.assign. + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). * - * @alias _.extend + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example * - * @param object The destination object. - * @param source The source objects. - * @param customizer The function to customize assigned values. - * @param thisArg The this binding of callback. - * @return The destination object. + * function Foo() { + * this.c = 3; + * } + * + * function Bar() { + * this.e = 5; + * } + * + * Foo.prototype.d = 4; + * Bar.prototype.f = 6; + * + * _.assign({ 'a': 1 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3, 'e': 5 } */ assign( object: TObject, - source: TSource, - customizer?: AssignCustomizer, - thisArg?: any + source: TSource ): TResult; /** @@ -11506,9 +11514,7 @@ declare module _ { assign( object: TObject, source1: TSource1, - source2: TSource2, - customizer?: AssignCustomizer, - thisArg?: any + source2: TSource2 ): TResult; /** @@ -11518,9 +11524,7 @@ declare module _ { object: TObject, source1: TSource1, source2: TSource2, - source3: TSource3, - customizer?: AssignCustomizer, - thisArg?: any + source3: TSource3 ): TResult; /** @@ -11533,9 +11537,7 @@ declare module _ { source1: TSource1, source2: TSource2, source3: TSource3, - source4: TSource4, - customizer?: AssignCustomizer, - thisArg?: any + source4: TSource4 ): TResult; /** @@ -11556,9 +11558,7 @@ declare module _ { * @see _.assign */ assign( - source: TSource, - customizer?: AssignCustomizer, - thisArg?: any + source: TSource ): LoDashImplicitObjectWrapper; /** @@ -11566,9 +11566,7 @@ declare module _ { */ assign( source1: TSource1, - source2: TSource2, - customizer?: AssignCustomizer, - thisArg?: any + source2: TSource2 ): LoDashImplicitObjectWrapper; /** @@ -11577,9 +11575,7 @@ declare module _ { assign( source1: TSource1, source2: TSource2, - source3: TSource3, - customizer?: AssignCustomizer, - thisArg?: any + source3: TSource3 ): LoDashImplicitObjectWrapper; /** @@ -11589,9 +11585,7 @@ declare module _ { source1: TSource1, source2: TSource2, source3: TSource3, - source4: TSource4, - customizer?: AssignCustomizer, - thisArg?: any + source4: TSource4 ): LoDashImplicitObjectWrapper; /** @@ -11610,9 +11604,7 @@ declare module _ { * @see _.assign */ assign( - source: TSource, - customizer?: AssignCustomizer, - thisArg?: any + source: TSource ): LoDashExplicitObjectWrapper; /** @@ -11620,9 +11612,7 @@ declare module _ { */ assign( source1: TSource1, - source2: TSource2, - customizer?: AssignCustomizer, - thisArg?: any + source2: TSource2 ): LoDashExplicitObjectWrapper; /** @@ -11631,9 +11621,7 @@ declare module _ { assign( source1: TSource1, source2: TSource2, - source3: TSource3, - customizer?: AssignCustomizer, - thisArg?: any + source3: TSource3 ): LoDashExplicitObjectWrapper; /** @@ -11643,9 +11631,7 @@ declare module _ { source1: TSource1, source2: TSource2, source3: TSource3, - source4: TSource4, - customizer?: AssignCustomizer, - thisArg?: any + source4: TSource4 ): LoDashExplicitObjectWrapper; /** @@ -11659,6 +11645,194 @@ declare module _ { assign(...otherArgs: any[]): LoDashExplicitObjectWrapper; } + //_.assignWith + interface AssignCustomizer { + (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}): any; + } + + interface LoDashStatic { + /** + * This method is like `_.assign` except that it accepts `customizer` which + * is invoked to produce the assigned values. If `customizer` returns `undefined` + * assignment is handled by the method instead. The `customizer` is invoked + * with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + assignWith( + object: TObject, + source: TSource, + customizer: AssignCustomizer + ): TResult; + + /** + * @see assignWith + */ + assignWith( + object: TObject, + source1: TSource1, + source2: TSource2, + customizer: AssignCustomizer + ): TResult; + + /** + * @see assignWith + */ + assignWith( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer: AssignCustomizer + ): TResult; + + /** + * @see assignWith + */ + assignWith + ( + object: TObject, + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer: AssignCustomizer + ): TResult; + + /** + * @see _.assignWith + */ + assignWith(object: TObject): TObject; + + /** + * @see _.assignWith + */ + assignWith( + object: TObject, ...otherArgs: any[] + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.assignWith + */ + assignWith( + source: TSource, + customizer: AssignCustomizer + ): LoDashImplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + customizer: AssignCustomizer + ): LoDashImplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer: AssignCustomizer + ): LoDashImplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer: AssignCustomizer + ): LoDashImplicitObjectWrapper; + + /** + * @see _.assignWith + */ + assignWith(): LoDashImplicitObjectWrapper; + + /** + * @see _.assignWith + */ + assignWith(...otherArgs: any[]): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.assignWith + */ + assignWith( + source: TSource, + customizer: AssignCustomizer + ): LoDashExplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + customizer: AssignCustomizer + ): LoDashExplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + source3: TSource3, + customizer: AssignCustomizer + ): LoDashExplicitObjectWrapper; + + /** + * @see assignWith + */ + assignWith( + source1: TSource1, + source2: TSource2, + source3: TSource3, + source4: TSource4, + customizer: AssignCustomizer + ): LoDashExplicitObjectWrapper; + + /** + * @see _.assignWith + */ + assignWith(): LoDashExplicitObjectWrapper; + + /** + * @see _.assignWith + */ + assignWith(...otherArgs: any[]): LoDashExplicitObjectWrapper; + } + + + //_.create interface LoDashStatic { /**