2

我正在使用 node (TypeScript) 和 node-redis 库。由于我使用 TypeScript,因此我还导入了 @types/redis。

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

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

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

在此处输入图像描述

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

我想我在做一些明显错误的事情。有任何想法吗?

4

1 回答 1

0

我查看了类型的源代码,似乎 egget被定义为一个函数:

get(key: string, cb?: Callback<string | null>): R;

hset定义为:

hset: OverloadedSetCommand<string, number, R>;

AltoughOverloadedSetCommand定义为

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上提出一个问题,但现在我想你必须接受它。

于 2020-08-22T18:16:40.107 回答