我在正确键入 redis 节点包时遇到问题。作为简单 JSON.GET 的基本代码示例
import * as redis from 'redis';
const client = redis.createClient();
async function getSomeData() {
return await client.json.get('keyname', { path: '$.path'})
}
异步函数返回一个 Promise,在这个例子中,我希望从 redis 返回的数据是一个对象数组,比如
type returnObject = {
key1: string;
key2: string;
}
我正在努力解决的是如何只从返回的数组中返回第一个对象,如果我尝试:
async function getSomeData() {
return await client.json.get('keyname', { path: '$.path'})[0]
}
我在 vscode 中收到以下错误:
元素隐式具有“任何”类型,因为“0”类型的表达式不能用于索引类型“Promise<string | 号码 | 布尔值 | 日期 | (string | number | boolean | Date | (string | number | boolean | Date | (string | number | boolean | Date | (string | ... 5 more ... | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | null)[] | { ...; } | 空>'。
因此,可以理解的是,如果我尝试类似
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