Redis:使用 TypeScript 添加到排序集

Posted

技术标签:

【中文标题】Redis:使用 TypeScript 添加到排序集【英文标题】:Redis: Add to sorted set using 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[] 【参考方案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 ) 应该是诀窍

【讨论】:

以上是关于Redis:使用 TypeScript 添加到排序集的主要内容,如果未能解决你的问题,请参考以下文章

typescript 使用Typescript将属性添加到Vue.js中的数组

如何将 TypeScript 定义文件添加到源代码管理?

Redis新特性GEOHASH

如何将 typescript-eslint 规则添加到 eslint

将定义添加到 Typescript 中的现有模块

在Angular / Typescript中使用整数和字母对数组进行排序