Redis:使用TypeScript将元素添加到有序集合

3

我正在尝试使用TypeScript向Redis中的有序集合添加值,像这样:client.ZADD('test', 10, 'test'),但是这会抛出一个错误。

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<ClientCommandOptions>, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined])。假设您想要使用三个值,那么 10 是否与 ZMember | ZMember[] 兼容,test 是否与 ZAddOptions | undefined 兼容?TS 假定您选择了第二个签名,并要求您提供 CommandOptions<ClientCommandOptions> 作为第一个参数。 - doup
@doup 尝试通过导入commandOptions并将client.ZADD('test', 10, 'test')更新为clinet.zAdd(commandOptions({}), 'test', 10, 'test'),但我得到了这个错误Type '[CommandOptions<ClientCommandOptions>, "test", 10, "test"]' is not assignable to type '[options: CommandOptions<ClientCommandOptions>, 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[]' - Emekarr
2个回答

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'})

1

client.ZADD('test', { member: 'test', score: 10 })应该可以解决问题。


(本段内容涉及IT技术,意为向名称为“test”的客户端添加成员为“test”,分值为10的记录。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接