如何将 HMSET 与节点 promisify 一起使用

How do I use HMSET with node promisify

我正在使用 node (TypeScript) 和 node-redis 库。由于我使用的是TypeScript,所以我还导入了@types/redis.

此外,我阅读了这篇关于如何为 TypeScript 使用 promisify redis 方法的文章:https://flaviocopes.com/node-promisify/

我的问题是它适用于某些 redis 方法(如 GET、SET 等),但不适用于例如HSET 或 HGETALL。

如果我查看类型建议,我发现关键方法实际上根本不是方法,而是属性(hset、HSET):

为什么会这样?我怎样才能访问那些需要的方法?

我想我做错了什么。有什么想法吗?

我看了一下 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 顺便说一句)。

如果我手动覆盖定义为:

hset(hash: string, field: string, value:any): R;

代码完成显示了预期的功能。

也许你可以在 https://github.com/DefinitelyTyped/DefinitelyTyped 上提出问题,但现在我想你必须接受它。