redis节点库中的redis方法get具有以下类型记录签名:
export interface Commands<R> {
get(key: string, cb?: Callback<string | null>): R;
}如果我promisify该方法,则签名丢失,返回类型变为any。
我试图用这样的方式设置正确的签名:
const client = redis.createClient(redisOption);
const getAsync = promisify<redis.Commands<boolean>['get']>(client.get).bind(client);但是ts lint显示了一些错误:
获取键的值。
没有过载和这个电话匹配。重载14中的1,'(fn: CustomPromisify<(key: string,cb?:Callback) => boolean>):(key: string,cb?:Callback) => boolean',给出了以下错误。类型'(key: string,cb?:Callback) => boolean‘的参数不能分配给'CustomPromisify<(key: string,cb?:Callback) =>布尔>’的参数。属性'promisify‘在类型’(键: string,cb?:回调) => boolean‘中缺失,但在类型'CustomPromisifyLegacy<(key: string,cb?:Callback) => boolean>中需要。重载14中的2,‘(回调:(错误:任何,结果:(key:=>,cb?:回调) => => )):() => Promise<(键: string,cb:回调) => boolean>',给出了以下错误。=>布尔值“不能分配给类型的参数”(回调:(错误:任何,结果:(key: string,cb:回调) =>布尔值) => void) => void‘。
如何设置正确的签名?
发布于 2021-08-11 07:31:49
我只是遇到了一个类似的问题。
不确定它是否是最佳解决方案,但我所做的是扩展RedisClient接口,然后重写get方法类型。
import util from "util";
import redis from "redis";
interface PromiseRedis extends Omit<redis.RedisClient, "get"> {
get(key: string): Promise<string | boolean> | boolean;
}
const url = "redis://127.0.0.1:6379";
const redisClient:PromiseRedis = redis.createClient(url);
redisClient.get = util.promisify(redisClient.get)现在get函数返回一个承诺。
https://stackoverflow.com/questions/64570192
复制相似问题