From 1a87b237e8f43f1dee44dcab8e9da6855bbf772a Mon Sep 17 00:00:00 2001 From: Trim21 Date: Sat, 15 Apr 2023 17:34:15 +0800 Subject: [PATCH] fix: add types for known events (#1694) Co-authored-by: Zihua Li --- lib/Redis.ts | 43 ++++++++++++++++++++++- test/typing/events.test-.ts | 68 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 test/typing/events.test-.ts diff --git a/lib/Redis.ts b/lib/Redis.ts index cdcabb31..ff7cf29b 100644 --- a/lib/Redis.ts +++ b/lib/Redis.ts @@ -838,7 +838,48 @@ class Redis extends Commander implements DataHandledable { } } -interface Redis extends EventEmitter {} +interface Redis extends EventEmitter { + on(event: "message", cb: (channel: string, message: string) => void): this; + once(event: "message", cb: (channel: string, message: string) => void): this; + + on( + event: "messageBuffer", + cb: (channel: Buffer, message: Buffer) => void + ): this; + once( + event: "messageBuffer", + cb: (channel: Buffer, message: Buffer) => void + ): this; + + on( + event: "pmessage", + cb: (pattern: string, channel: string, message: string) => void + ): this; + once( + event: "pmessage", + cb: (pattern: string, channel: string, message: string) => void + ): this; + + on( + event: "pmessageBuffer", + cb: (pattern: string, channel: Buffer, message: Buffer) => void + ): this; + once( + event: "pmessageBuffer", + cb: (pattern: string, channel: Buffer, message: Buffer) => void + ): this; + + on(event: "error", cb: (error: Error) => void): this; + once(event: "error", cb: (error: Error) => void): this; + + on(event: RedisStatus, cb: () => void): this; + once(event: RedisStatus, cb: () => void): this; + + // base method of EventEmitter + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; +} + applyMixin(Redis, EventEmitter); addTransactionSupport(Redis.prototype); diff --git a/test/typing/events.test-.ts b/test/typing/events.test-.ts new file mode 100644 index 00000000..11e96ad6 --- /dev/null +++ b/test/typing/events.test-.ts @@ -0,0 +1,68 @@ +import { expectType } from "tsd"; +import { Redis } from "../../built"; + +const redis = new Redis(); + +expectType(redis.on("connect", () => {})); +expectType(redis.on("ready", () => {})); +expectType(redis.on("close", () => {})); +expectType(redis.on("end", () => {})); +expectType( + redis.on("error", (error) => { + expectType(error); + }) +); + +expectType(redis.once("connect", () => {})); +expectType(redis.once("ready", () => {})); +expectType(redis.once("close", () => {})); +expectType(redis.once("end", () => {})); +expectType( + redis.once("error", (error) => { + expectType(error); + }) +); + +redis.on("message", (channel, message) => { + expectType(channel); + expectType(message); +}); + +redis.on("messageBuffer", (channel, message) => { + expectType(channel); + expectType(message); +}); + +redis.on("pmessage", (pattern, channel, message) => { + expectType(pattern); + expectType(channel); + expectType(message); +}); + +redis.on("pmessageBuffer", (pattern, channel, message) => { + expectType(pattern); + expectType(channel); + expectType(message); +}); + +redis.once("message", (channel, message) => { + expectType(channel); + expectType(message); +}); + +redis.once("messageBuffer", (channel, message) => { + expectType(channel); + expectType(message); +}); + +redis.once("pmessage", (pattern, channel, message) => { + expectType(pattern); + expectType(channel); + expectType(message); +}); + +redis.once("pmessageBuffer", (pattern, channel, message) => { + expectType(pattern); + expectType(channel); + expectType(message); +});