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<ClientCommandOptions>, key: string, members: ZMember | ZMember[], options?: ZAddOptions | undefined]
)。假设您想要三个值之一,10
与ZMember | ZMember[]
兼容,test
与ZAddOptions | undefined
兼容吗? TS 假设您要进行第二个签名,并要求您提供 CommandOptions<ClientCommandOptions>
作为第一个参数。
@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[]
【参考方案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中的数组