【问题标题】:Redis: Add to sorted set using TypeScriptRedis:使用 TypeScript 添加到排序集
【发布时间】:2022-01-04 09:40:39
【问题描述】:

我正在尝试使用像 client.ZADD('test', 10, 'test') 这样的 TypeScript 向 Redis 中的排序集添加一个值,但这会引发错误

Argument of type '["test", 10, "test"]' is not assignable to parameter of type '[key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined] | [options: CommandOptions<ClientCommandOptions>, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined]'.
  Type '["test", 10, "test"]' is not assignable to type '[options: CommandOptions<ClientCommandOptions>, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined]'.
    Type at position 0 in source is not compatible with type at position 0 in target.
      Type 'string' is not assignable to type 'CommandOptions<ClientCommandOptions>'.
        Type 'string' is not assignable to type '{ readonly [symbol]: true; }'.

【问题讨论】:

  • 看起来 ZADD 接受三个参数 ([key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined]) 或四个 ([options: CommandOptions&lt;ClientCommandOptions&gt;, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined])。假设您想要三个值之一,10ZMember | ZMember[] 兼容,testZAddOptions | undefined 兼容吗? TS 假设您要进行第二个签名,并要求您提供 CommandOptions&lt;ClientCommandOptions&gt; 作为第一个参数。
  • @doup 尝试通过导入commandOptions 并将client.ZADD('test', 10, 'test') 更新为clinet.zAdd(commandOptions({}), 'test', 10, 'test') 来执行此操作,但我收到此错误Type '[CommandOptions&lt;ClientCommandOptions&gt;, "test", 10, "test"]' is not assignable to type '[options: CommandOptions&lt;ClientCommandOptions&gt;, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined]'. Type at position 2 in source is not compatible with type at position 2 in target. Type 'number' is not assignable to type 'ZMember | ZMember[]

标签: javascript node.js typescript redis node-redis


【解决方案1】:

在 redis 类型定义文件中找到:

node_modules\@node-redis\client\dist\lib\commands\generic-transformers.d.ts

ZMember 类型的接口定义如下:

interface ZMember {
    score: number;
    value: string;
}

所以你的函数调用应该如下所示:

client.zAdd('test_list', { score: 10, value: 'test'})

【讨论】:

    【解决方案2】:

    client.ZADD('test', { member: 'test', score: 10 }) 应该是诀窍

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多