首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确键入异步RedisJSON方法?

如何正确键入异步RedisJSON方法?
EN

Stack Overflow用户
提问于 2022-02-24 20:17:25
回答 2查看 260关注 0票数 2

我在正确键入redis节点包时遇到了问题。作为简单JSON.GET的基本代码示例

代码语言:javascript
复制
import * as redis from 'redis';
const client = redis.createClient();
async function getSomeData() {
    return await client.json.get('keyname', { path: '$.path'})
}

异步函数返回一个承诺,在本例中,我希望redis返回的数据是一个对象数组,类似于

代码语言:javascript
复制
type returnObject = {
  key1: string;
  key2: string;
}

如果我尝试从返回的数组中返回第一个对象,那么我所面临的困难是如何返回第一个对象:

代码语言:javascript
复制
async function getSomeData() {
    return await client.json.get('keyname', { path: '$.path'})[0]
}

我在vscode中得到以下错误:

元素隐式具有“任意”类型,因为'0‘类型的表达式不能用于索引类型'Promise

因此,可以理解的是,如果我尝试这样的操作,我会得到一个类似的错误,说明相同的不能分配到输入returnObject

代码语言:javascript
复制
async function getSomeData(): Promise<returnObject[]> {
    return await client.json.get('keyname', { path: '$.path'})
}

我认为这种类型来自@node-redis包中的RedisJSON类型,但无论哪种方式,我都不清楚如何解决这个问题。我唯一能接近的方法是使用一个助手函数,该函数将getSomeData的结果分配给任意类型,但这违背了使用TypeScript的意义。有人能告诉我应该如何正确地输入使用新的RedisJSON方法的异步函数,以便可以使用这些结果吗?谢谢

编辑:为了清晰起见,我使用的包是https://www.npmjs.com/package/redis

EN

回答 2

Stack Overflow用户

发布于 2022-02-24 20:52:29

我相信您的await是针对数组访问操作的,而不是对client.json.get的调用。我能够从JavaScript获得类似的问题,并通过调用:

代码语言:javascript
复制
let results = await client.json.get('keyname', { path: '$.path'});
return results[0];
票数 1
EN

Stack Overflow用户

发布于 2022-07-01 22:49:29

代码语言:javascript
复制
async function getSomeData(): Promise<returnObject[]> {
  return await client.json.get('keyname', { path: '$.path'}) as unknown as returnObject[]
}

显然,您需要确保实际从client.json.get(...)获得的是Promise类型,因为这实际上是放弃返回值的类型,然后将其转换为所需的类型。

这不是最漂亮的解决方案,但根据我的经验,@redis/json中的类型并不是最好的。

希望这会有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71257771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档