我使用的是node (TypeScript)和node-redis库。因为我使用的是TypeScript,所以我也导入了@types/redis。
此外,我还阅读了这篇关于如何简化redis方法以用于TypeScript的文章:https://flaviocopes.com/node-promisify/
我的问题是,它适用于一些redis方法(如GET、SET等),但不适用于例如HSET或HGETALL。
如果我查看类型建议,我会发现关键方法实际上根本不是方法,而是属性(hset,HSET):

为何会这样呢?如何访问这些所需的方法?
我想我做了一些明显错误的事情。有什么想法吗?
发布于 2020-08-23 02:16:40
我看了一下source code of the typings,似乎get被定义为一个函数:
get(key: string, cb?: Callback<string | null>): R;而hset被定义为:
hset: OverloadedSetCommand<string, number, R>;尽管OverloadedSetCommand被定义为
export interface OverloadedCommand<T, U, R> {
(arg1: T, arg2: T, arg3: T, arg4: T, arg5: T, arg6: T, cb?: Callback<U>): R;
(arg1: T, arg2: T, arg3: T, arg4: T, arg5: T, cb?: Callback<U>): R;
(arg1: T, arg2: T, arg3: T, arg4: T, cb?: Callback<U>): R;
(arg1: T, arg2: T, arg3: T, cb?: Callback<U>): R;
(arg1: T, arg2: T | T[], cb?: Callback<U>): R;
(arg1: T | T[], cb?: Callback<U>): R;
(...args: Array<T | Callback<U>>): R;
}它似乎被解释为一个属性(同样的情况在Webstorm中发生,而不仅仅是在vscode btw中)。
如果我手动覆盖该定义,如下所示:
hset(hash: string, field: string, value:any): R;代码完成显示了一个预期的函数。
也许你可以在https://github.com/DefinitelyTyped/DefinitelyTyped上提出一个问题,但现在我想你只能顺其自然了。
https://stackoverflow.com/questions/63539317
复制相似问题