diff --git a/bin/template.ts b/bin/template.ts index 47d2a6389..82c3a22ba 100644 --- a/bin/template.ts +++ b/bin/template.ts @@ -11,8 +11,9 @@ export interface ResultTypes { pipeline: ChainableCommander; } -export interface ChainableCommander - extends RedisCommander<{ type: "pipeline" }> {} +export interface ChainableCommander extends RedisCommander<{ type: "pipeline" }> { + length: number; +} export type ClientContext = { type: keyof ResultTypes }; export type Result = diff --git a/lib/Pipeline.ts b/lib/Pipeline.ts index 9e887b9d1..cf128fbf4 100644 --- a/lib/Pipeline.ts +++ b/lib/Pipeline.ts @@ -392,3 +392,7 @@ Pipeline.prototype.exec = function (callback: Callback): Promise> { return _this.promise; } }; + +interface Pipeline { + length: number; +} diff --git a/lib/utils/RedisCommander.ts b/lib/utils/RedisCommander.ts index 8ee140c80..eec27983f 100644 --- a/lib/utils/RedisCommander.ts +++ b/lib/utils/RedisCommander.ts @@ -11,8 +11,9 @@ export interface ResultTypes { pipeline: ChainableCommander; } -export interface ChainableCommander - extends RedisCommander<{ type: "pipeline" }> {} +export interface ChainableCommander extends RedisCommander<{ type: "pipeline" }> { + length: number; +} export type ClientContext = { type: keyof ResultTypes }; export type Result = diff --git a/test/functional/pipeline.ts b/test/functional/pipeline.ts index ac73364d8..c658362be 100644 --- a/test/functional/pipeline.ts +++ b/test/functional/pipeline.ts @@ -400,6 +400,7 @@ describe("pipeline", () => { const pipeline1 = redis .pipeline() + // @ts-expect-error .multi() .set("foo", "bar") .get("foo") diff --git a/test/typing/pipeline.test-d.ts b/test/typing/pipeline.test-d.ts index b522b5b50..31851b059 100644 --- a/test/typing/pipeline.test-d.ts +++ b/test/typing/pipeline.test-d.ts @@ -1,5 +1,5 @@ import { expectType } from "tsd"; -import Redis from "../../built"; +import Redis, { Pipeline } from "../../built"; const redis = new Redis(); @@ -24,3 +24,12 @@ expectType( ]) .exec() ); + +expectType( + redis.pipeline([ + ["set", Buffer.from("foo"), "bar"], + ["incrby", "foo", 42], + ]).length +); + +expectType(({} as unknown as Pipeline).length); \ No newline at end of file