diff --git a/lodash/lodash-3.10.d.ts b/lodash/lodash-3.10.d.ts index 00f15d254..cd63bb772 100644 --- a/lodash/lodash-3.10.d.ts +++ b/lodash/lodash-3.10.d.ts @@ -13341,40 +13341,65 @@ declare module _ { * @param value The value to set. * @return Returns object. */ - set( - object: T, + set( + object: Object, path: StringRepresentable|StringRepresentable[], value: any - ): T; + ): TResult; /** * @see _.set */ - set( - object: T, + set( + object: Object, path: StringRepresentable|StringRepresentable[], value: V - ): T; + ): TResult; + + /** + * @see _.set + */ + set( + object: O, + path: StringRepresentable|StringRepresentable[], + value: V + ): TResult; } interface LoDashImplicitObjectWrapper { /** * @see _.set */ - set( + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.set + */ + set( path: StringRepresentable|StringRepresentable[], value: V - ): LoDashImplicitObjectWrapper; + ): LoDashImplicitObjectWrapper; } interface LoDashExplicitObjectWrapper { /** * @see _.set */ - set( + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.set + */ + set( path: StringRepresentable|StringRepresentable[], value: V - ): LoDashExplicitObjectWrapper; + ): LoDashExplicitObjectWrapper; } //_.transform diff --git a/lodash/lodash-tests-3.10.ts b/lodash/lodash-tests-3.10.ts index 59f246172..a021f9ec3 100644 --- a/lodash/lodash-tests-3.10.ts +++ b/lodash/lodash-tests-3.10.ts @@ -8676,39 +8676,43 @@ module TestPick { // _.set module TestSet { - type SampleValue = {a: number; b: string; c: boolean;}; + type SampleObject = {a: {}}; + type SampleResult = {a: {b: number[]}}; - let object: TResult; - let value = {a: 1, b: '', c: true}; + let object: SampleObject; + let value: number; { - let result: TResult; + let result: SampleResult; - result = _.set(object, '', any); - result = _.set(object, ['a', 'b', 1], any); + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); - result = _.set(object, '', value); - result = _.set(object, ['a', 'b', 1], value); + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); + + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); } { - let result: _.LoDashImplicitObjectWrapper; + let result: _.LoDashImplicitObjectWrapper; - result = _(object).set('', any); - result = _(object).set(['a', 'b', 1], any); + result = _(object).set('a.b[1]', value); + result = _(object).set(['a', 'b', 1], value); - result = _(object).set('', value); - result = _(object).set(['a', 'b', 1], value); + result = _(object).set('a.b[1]', value); + result = _(object).set(['a', 'b', 1], value); } { - let result: _.LoDashExplicitObjectWrapper; + let result: _.LoDashExplicitObjectWrapper; - result = _(object).chain().set('', any); - result = _(object).chain().set(['a', 'b', 1], any); + result = _(object).chain().set('a.b[1]', value); + result = _(object).chain().set(['a', 'b', 1], value); - result = _(object).chain().set('', value); - result = _(object).chain().set(['a', 'b', 1], value); + result = _(object).chain().set('a.b[1]', value); + result = _(object).chain().set(['a', 'b', 1], value); } } diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index a7d3a72b8..c736deebf 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -8745,39 +8745,100 @@ module TestPickBy { // _.set module TestSet { - type SampleValue = {a: number; b: string; c: boolean;}; + type SampleObject = {a: {}}; + type SampleResult = {a: {b: number[]}}; - let object: TResult; - let value = {a: 1, b: '', c: true}; + let object: SampleObject; + let value: number; { - let result: TResult; + let result: SampleResult; - result = _.set(object, '', any); - result = _.set(object, ['a', 'b', 1], any); + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); - result = _.set(object, '', value); - result = _.set(object, ['a', 'b', 1], value); + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); + + result = _.set(object, 'a.b[1]', value); + result = _.set(object, ['a', 'b', 1], value); } { - let result: _.LoDashImplicitObjectWrapper; + let result: _.LoDashImplicitObjectWrapper; - result = _(object).set('', any); - result = _(object).set(['a', 'b', 1], any); + result = _(object).set('a.b[1]', value); + result = _(object).set(['a', 'b', 1], value); - result = _(object).set('', value); - result = _(object).set(['a', 'b', 1], value); + result = _(object).set('a.b[1]', value); + result = _(object).set(['a', 'b', 1], value); } { - let result: _.LoDashExplicitObjectWrapper; + let result: _.LoDashExplicitObjectWrapper; - result = _(object).chain().set('', any); - result = _(object).chain().set(['a', 'b', 1], any); + result = _(object).chain().set('a.b[1]', value); + result = _(object).chain().set(['a', 'b', 1], value); - result = _(object).chain().set('', value); - result = _(object).chain().set(['a', 'b', 1], value); + result = _(object).chain().set('a.b[1]', value); + result = _(object).chain().set(['a', 'b', 1], value); + } +} + +// _.setWith +module TestSetWith { + type SampleObject = {a: {}}; + type SampleResult = {a: {b: number[]}}; + + let object: SampleObject; + let value: number; + let customizer: (value: any, key: string, object: SampleObject) => number; + + { + let result: SampleResult; + + result = _.setWith(object, 'a.b[1]', value); + result = _.setWith(object, 'a.b[1]', value, customizer); + result = _.setWith(object, ['a', 'b', 1], value); + result = _.setWith(object, ['a', 'b', 1], value, customizer); + + result = _.setWith(object, 'a.b[1]', value); + result = _.setWith(object, 'a.b[1]', value, customizer); + result = _.setWith(object, ['a', 'b', 1], value); + result = _.setWith(object, ['a', 'b', 1], value, customizer); + + result = _.setWith(object, 'a.b[1]', value); + result = _.setWith(object, 'a.b[1]', value, customizer); + result = _.setWith(object, ['a', 'b', 1], value); + result = _.setWith(object, ['a', 'b', 1], value, customizer); + } + + { + let result: _.LoDashImplicitObjectWrapper; + + result = _(object).setWith('a.b[1]', value); + result = _(object).setWith('a.b[1]', value, customizer); + result = _(object).setWith(['a', 'b', 1], value); + result = _(object).setWith(['a', 'b', 1], value, customizer); + + result = _(object).setWith('a.b[1]', value); + result = _(object).setWith('a.b[1]', value, customizer); + result = _(object).setWith(['a', 'b', 1], value); + result = _(object).setWith(['a', 'b', 1], value, customizer); + } + + { + let result: _.LoDashExplicitObjectWrapper; + + result = _(object).chain().setWith('a.b[1]', value); + result = _(object).chain().setWith('a.b[1]', value, customizer); + result = _(object).chain().setWith(['a', 'b', 1], value); + result = _(object).chain().setWith(['a', 'b', 1], value, customizer); + + result = _(object).chain().setWith('a.b[1]', value); + result = _(object).chain().setWith('a.b[1]', value, customizer); + result = _(object).chain().setWith(['a', 'b', 1], value); + result = _(object).chain().setWith(['a', 'b', 1], value, customizer); } } diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index e5f938b54..e8d9d1d20 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -14578,47 +14578,159 @@ declare module _ { //_.set interface LoDashStatic { /** - * Sets the property value of path on object. If a portion of path does not exist it’s created. + * Sets the value at path of object. If a portion of path doesn’t exist it’s created. Arrays are created for + * missing index properties while objects are created for all other missing properties. Use _.setWith to + * customize path creation. * - * @param object The object to augment. + * @param object The object to modify. * @param path The path of the property to set. * @param value The value to set. * @return Returns object. */ - set( - object: T, + set( + object: Object, path: StringRepresentable|StringRepresentable[], value: any - ): T; + ): TResult; /** * @see _.set */ - set( - object: T, + set( + object: Object, path: StringRepresentable|StringRepresentable[], value: V - ): T; + ): TResult; + + /** + * @see _.set + */ + set( + object: O, + path: StringRepresentable|StringRepresentable[], + value: V + ): TResult; } interface LoDashImplicitObjectWrapper { /** * @see _.set */ - set( + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashImplicitObjectWrapper; + + /** + * @see _.set + */ + set( path: StringRepresentable|StringRepresentable[], value: V - ): LoDashImplicitObjectWrapper; + ): LoDashImplicitObjectWrapper; } interface LoDashExplicitObjectWrapper { /** * @see _.set */ - set( + set( + path: StringRepresentable|StringRepresentable[], + value: any + ): LoDashExplicitObjectWrapper; + + /** + * @see _.set + */ + set( path: StringRepresentable|StringRepresentable[], value: V - ): LoDashExplicitObjectWrapper; + ): LoDashExplicitObjectWrapper; + } + + //_.setWith + interface SetWithCustomizer { + (nsValue: any, key: string, nsObject: T): any; + } + + interface LoDashStatic { + /** + * This method is like _.set except that it accepts customizer which is invoked to produce the objects of + * path. If customizer returns undefined path creation is handled by the method instead. The customizer is + * invoked with three arguments: (nsValue, key, nsObject). + * + * @param object The object to modify. + * @param path The path of the property to set. + * @param value The value to set. + * @parem customizer The function to customize assigned values. + * @return Returns object. + */ + setWith( + object: Object, + path: StringRepresentable|StringRepresentable[], + value: any, + customizer?: SetWithCustomizer + ): TResult; + + /** + * @see _.setWith + */ + setWith( + object: Object, + path: StringRepresentable|StringRepresentable[], + value: V, + customizer?: SetWithCustomizer + ): TResult; + + /** + * @see _.setWith + */ + setWith( + object: O, + path: StringRepresentable|StringRepresentable[], + value: V, + customizer?: SetWithCustomizer + ): TResult; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.setWith + */ + setWith( + path: StringRepresentable|StringRepresentable[], + value: any, + customizer?: SetWithCustomizer + ): LoDashImplicitObjectWrapper; + + /** + * @see _.setWith + */ + setWith( + path: StringRepresentable|StringRepresentable[], + value: V, + customizer?: SetWithCustomizer + ): LoDashImplicitObjectWrapper; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.setWith + */ + setWith( + path: StringRepresentable|StringRepresentable[], + value: any, + customizer?: SetWithCustomizer + ): LoDashExplicitObjectWrapper; + + /** + * @see _.setWith + */ + setWith( + path: StringRepresentable|StringRepresentable[], + value: V, + customizer?: SetWithCustomizer + ): LoDashExplicitObjectWrapper; } //_.transform