redis / ioredis

🚀 A robust, performance-focused, and full-featured Redis client for Node.js.
MIT License
14.06k stars 1.19k forks source link

Dynamic keys for defineCommand type safety in Typescript #1876

Open francescov1 opened 3 months ago

francescov1 commented 3 months ago

Is there a way to make dynamic key support for defineCommand type safe? Eg currently i have this:

declare module 'ioredis' {
  interface RedisCommander<Context> {
    addUserToQueueScript(
      // keys
      activeUserChatKey: string,
      queueKey: string,
      // TODO: More keys can be added here

      // args
      userId: string,
      chatId: string,
      currentTimestamp: number,
      maxQueueLength: number,
      maxParallelChatRequests: number,
      callback?: Callback<string>
    ): Result<string, Context>;
  }
}

It would be great if there was a way to pass keys as a single array, so that the rest of the args can still be type safe. Something like this:

declare module 'ioredis' {
  interface RedisCommander<Context> {
    addUserToQueueScript(
      keys: string[],

      // args
      userId: string,
      chatId: string,
      currentTimestamp: number,
      maxQueueLength: number,
      maxParallelChatRequests: number,
      callback?: Callback<string>
    ): Result<string, Context>;
  }
}