From b352f98ef91ee1199ee639641613b8af8a68ab50 Mon Sep 17 00:00:00 2001 From: Ben Blank Date: Mon, 21 Mar 2016 09:58:26 -0700 Subject: [PATCH 1/3] add _.invoke --- lodash/lodash.d.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index 28c29ad9d..f8bf3050a 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -7831,6 +7831,38 @@ declare module _ { ): LoDashExplicitObjectWrapper>; } + //_.invoke + interface LoDashStatic { + /** + * Invokes the method at path of object. + * @param object The object to query. + * @param path The path of the method to invoke. + * @param args The arguments to invoke the method with. + **/ + invoke( + object: Dictionary, + path: string | Array, + ...args: any[]): any; + } + + interface LoDashImplicitObjectWrapper { + /** + * @see _.invoke + **/ + invoke( + path: string | Array, + ...args: any[]): any; + } + + interface LoDashExplicitObjectWrapper { + /** + * @see _.invoke + **/ + invoke( + path: string | Array, + ...args: any[]): any; + } + //_.invokeMap interface LoDashStatic { /** From f950bbe16419b2dd8ac9e7aceeaaf64f5adb17ef Mon Sep 17 00:00:00 2001 From: Ben Blank Date: Mon, 21 Mar 2016 09:59:18 -0700 Subject: [PATCH 2/3] add tests for _.invoke --- lodash/lodash-tests.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index eb74bd0bb..425ef6dfb 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -4364,6 +4364,47 @@ namespace TestKeyBy { } } +//_.invoke +namespace TestInvoke { + let nestedDict: _.Dictionary> = { + a: [0, 1, 2] + } + let numDict: _.Dictionary = { + a: 1, + b: 2, + c: 3, + d: 4 + } + + let result: any; + result = _.invoke(numDict, "a.toString"); + result = _.invoke(numDict, "a.toString", 2); + result = _.invoke(numDict, ["a", "toString"]); + result = _.invoke(numDict, ["a", "toString"], 2); + result = _.invoke>(nestedDict, ["a[0].toString"]); + result = _.invoke>(nestedDict, ["a[0].toString"], 2); + result = _.invoke>(nestedDict, ["a", 0, "toString"]); + result = _.invoke>(nestedDict, ["a", 0, "toString"], 2); + + result = _(numDict).invoke("a.toString"); + result = _(numDict).invoke("a.toString", 2); + result = _(numDict).invoke(["a", "toString"]); + result = _(numDict).invoke(["a", "toString"], 2); + result = _(nestedDict).invoke("a[0].toString"); + result = _(nestedDict).invoke("a[0].toString", 2); + result = _(nestedDict).invoke(["a", 0, "toString"]); + result = _(nestedDict).invoke(["a", 0, "toString"], 2); + + result = _(numDict).chain().invoke("a.toString"); + result = _(numDict).chain().invoke("a.toString", 2); + result = _(numDict).chain().invoke(["a", "toString"]); + result = _(numDict).chain().invoke(["a", "toString"], 2); + result = _(nestedDict).chain().invoke("a[0].toString"); + result = _(nestedDict).chain().invoke("a[0].toString", 2); + result = _(nestedDict).chain().invoke(["a", 0, "toString"]); + result = _(nestedDict).chain().invoke(["a", 0, "toString"], 2); +} + //_.invokeMap namespace TestInvokeMap { let numArray = [4, 2, 1, 3] From 74129cffcf34bfe6a417f533a5fe44d8065431cd Mon Sep 17 00:00:00 2001 From: Ilya Mochalov Date: Tue, 22 Mar 2016 22:26:13 +0500 Subject: [PATCH 3/3] lodash: changed _.invoke --- lodash/lodash-tests.ts | 91 ++++++++++++++++++++++++++++++------------ lodash/lodash.d.ts | 54 ++++++++++++++++++++----- 2 files changed, 110 insertions(+), 35 deletions(-) diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index 425ef6dfb..a27cf7ff1 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -4366,9 +4366,12 @@ namespace TestKeyBy { //_.invoke namespace TestInvoke { + let boolArray: boolean[] = [true, false]; + let nestedDict: _.Dictionary> = { a: [0, 1, 2] } + let numDict: _.Dictionary = { a: 1, b: 2, @@ -4376,33 +4379,71 @@ namespace TestInvoke { d: 4 } - let result: any; - result = _.invoke(numDict, "a.toString"); - result = _.invoke(numDict, "a.toString", 2); - result = _.invoke(numDict, ["a", "toString"]); - result = _.invoke(numDict, ["a", "toString"], 2); - result = _.invoke>(nestedDict, ["a[0].toString"]); - result = _.invoke>(nestedDict, ["a[0].toString"], 2); - result = _.invoke>(nestedDict, ["a", 0, "toString"]); - result = _.invoke>(nestedDict, ["a", 0, "toString"], 2); + let result: string; - result = _(numDict).invoke("a.toString"); - result = _(numDict).invoke("a.toString", 2); - result = _(numDict).invoke(["a", "toString"]); - result = _(numDict).invoke(["a", "toString"], 2); - result = _(nestedDict).invoke("a[0].toString"); - result = _(nestedDict).invoke("a[0].toString", 2); - result = _(nestedDict).invoke(["a", 0, "toString"]); - result = _(nestedDict).invoke(["a", 0, "toString"], 2); + result = _.invoke(boolArray, "[1]"); + result = _.invoke(boolArray, "[1]", 2); + result = _.invoke(boolArray, [1, "toString"]); + result = _.invoke(boolArray, [1, "toString"], 2); - result = _(numDict).chain().invoke("a.toString"); - result = _(numDict).chain().invoke("a.toString", 2); - result = _(numDict).chain().invoke(["a", "toString"]); - result = _(numDict).chain().invoke(["a", "toString"], 2); - result = _(nestedDict).chain().invoke("a[0].toString"); - result = _(nestedDict).chain().invoke("a[0].toString", 2); - result = _(nestedDict).chain().invoke(["a", 0, "toString"]); - result = _(nestedDict).chain().invoke(["a", 0, "toString"], 2); + result = _.invoke(boolArray, "[1]"); + result = _.invoke(boolArray, "[1]", 2); + result = _.invoke(boolArray, [1, "toString"]); + result = _.invoke(boolArray, [1, "toString"], 2); + + result = _.invoke(numDict, "a.toString"); + result = _.invoke(numDict, "a.toString", 2); + result = _.invoke(numDict, ["a", "toString"]); + result = _.invoke(numDict, ["a", "toString"], 2); + + result = _.invoke(numDict, "a.toString"); + result = _.invoke(numDict, "a.toString", 2); + result = _.invoke(numDict, ["a", "toString"]); + result = _.invoke(numDict, ["a", "toString"], 2); + + result = _.invoke(nestedDict, ["a[0].toString"]); + result = _.invoke(nestedDict, ["a[0].toString"], 2); + result = _.invoke(nestedDict, ["a", 0, "toString"]); + result = _.invoke(nestedDict, ["a", 0, "toString"], 2); + + result = _.invoke, string>(nestedDict, ["a[0].toString"]); + result = _.invoke, string>(nestedDict, ["a[0].toString"], 2); + result = _.invoke, string>(nestedDict, ["a", 0, "toString"]); + result = _.invoke, string>(nestedDict, ["a", 0, "toString"], 2); + + result = _(boolArray).invoke("[1]"); + result = _(boolArray).invoke("[1]", 2); + result = _(boolArray).invoke([1, "toString"]); + result = _(boolArray).invoke([1, "toString"], 2); + + result = _(numDict).invoke("a.toString"); + result = _(numDict).invoke("a.toString", 2); + result = _(numDict).invoke(["a", "toString"]); + result = _(numDict).invoke(["a", "toString"], 2); + + result = _(nestedDict).invoke("a[0].toString"); + result = _(nestedDict).invoke("a[0].toString", 2); + result = _(nestedDict).invoke(["a", 0, "toString"]); + result = _(nestedDict).invoke(["a", 0, "toString"], 2); + + { + let result: _.LoDashExplicitWrapper; + + result = _(boolArray).chain().invoke<_.LoDashExplicitWrapper>("[1]"); + result = _(boolArray).chain().invoke<_.LoDashExplicitWrapper>("[1]", 2); + result = _(boolArray).chain().invoke<_.LoDashExplicitWrapper>([1, "toString"]); + result = _(boolArray).chain().invoke<_.LoDashExplicitWrapper>([1, "toString"], 2); + + result = _(numDict).chain().invoke<_.LoDashExplicitWrapper>("a.toString"); + result = _(numDict).chain().invoke<_.LoDashExplicitWrapper>("a.toString", 2); + result = _(numDict).chain().invoke<_.LoDashExplicitWrapper>(["a", "toString"]); + result = _(numDict).chain().invoke<_.LoDashExplicitWrapper>(["a", "toString"], 2); + + result = _(nestedDict).chain().invoke<_.LoDashExplicitWrapper>("a[0].toString"); + result = _(nestedDict).chain().invoke<_.LoDashExplicitWrapper>("a[0].toString", 2); + result = _(nestedDict).chain().invoke<_.LoDashExplicitWrapper>(["a", 0, "toString"]); + result = _(nestedDict).chain().invoke<_.LoDashExplicitWrapper>(["a", 0, "toString"], 2); + } } //_.invokeMap diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index f8bf3050a..348a8a5ca 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -7839,28 +7839,62 @@ declare module _ { * @param path The path of the method to invoke. * @param args The arguments to invoke the method with. **/ - invoke( - object: Dictionary, - path: string | Array, - ...args: any[]): any; + invoke( + object: TObject, + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; + + /** + * @see _.invoke + **/ + invoke( + object: Dictionary|TValue[], + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; + + /** + * @see _.invoke + **/ + invoke( + object: any, + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; + } + + interface LoDashImplicitArrayWrapper { + /** + * @see _.invoke + **/ + invoke( + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; } interface LoDashImplicitObjectWrapper { /** * @see _.invoke **/ - invoke( - path: string | Array, - ...args: any[]): any; + invoke( + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; + } + + interface LoDashExplicitArrayWrapper { + /** + * @see _.invoke + **/ + invoke( + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; } interface LoDashExplicitObjectWrapper { /** * @see _.invoke **/ - invoke( - path: string | Array, - ...args: any[]): any; + invoke( + path: StringRepresentable|StringRepresentable[], + ...args: any[]): TResult; } //_.invokeMap