如何将hmset与node promisify一起使用

tsm1rwdh  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(675)

我正在使用node(typescript)和node redis库。因为我使用typescript,所以我还导入了@types/redis。
此外,我还阅读了这篇关于如何为typescript使用promisify redis方法的文章:https://flaviocopes.com/node-promisify/
我的问题是,它适用于某些redis方法(如get、set等),但不适用于hset或hgetall。
如果我研究类型建议,我会发现关键方法实际上根本不是方法,而是属性(hset,hset):

为什么会这样?我如何访问这些需要的方法?
我想我做错了什么。有什么想法吗?

cigdeys3

cigdeys31#

我看了一下打字的源代码,似乎是这样的。 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;
}

似乎它被解释为一个属性(同样的情况不仅发生在vscode中,而且发生在webstorm中)。
如果我手动重写定义为:

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

代码完成如预期的那样显示函数。
也许你可以提出一个问题https://github.com/definitelytyped/definitelytyped 但现在我想你只能随波逐流了。

相关问题