Node.js 使用typescript的redis客户端del函数出错

Node.js 使用typescript的redis客户端del函数出错,node.js,typescript,express,redis,Node.js,Typescript,Express,Redis,在Redis类型定义中,delete函数不接受任何参数,当我尝试在NodeJS应用程序中调用它们时,我得到了 Expected 0 arguments, but got 1.ts(2554) 打电话的时候 await redisClient.del(codeId); 我已经通过向@types/redis的types.d.ts文件中添加(args:string[])作为临时修复程序来修复了这个问题,我是否遗漏了什么?提前感谢。这是因为redis类型定义中存在严重的函数类型重载,并且promis

在Redis类型定义中,delete函数不接受任何参数,当我尝试在NodeJS应用程序中调用它们时,我得到了

Expected 0 arguments, but got 1.ts(2554)
打电话的时候

await redisClient.del(codeId);

我已经通过向@types/redis的types.d.ts文件中添加(args:string[])作为临时修复程序来修复了这个问题,我是否遗漏了什么?提前感谢。

这是因为redis类型定义中存在严重的函数类型重载,并且promisify的类型声明中缺乏对重载函数的支持

解决这个问题的干净方法可能需要TypeScript来合并对的支持,或者如果redis包提供了自己的promisified API。在此之前,您可以向代码中添加类型转换

方法1:铸造promisify的结果 您可以将
promisify(client.del)
的结果强制转换为
(string | string[])=>Promise
,并对您使用的所有其他promisified redis函数执行此操作

方法2:为promisify添加类型重载
声明模块“util”{
函数promisify(fn:redis.重载命令):{
(arg1:T,arg2:T | T[]):承诺;
(arg1:T | T[]):承诺;
(…args:Array):承诺;
};
}

这将处理redis.OverloadedCommand类型的函数,其中del是,但根据您使用的redis的多少,您可能还需要添加额外的重载,以提示OverloadedKeyCommand、OverloadedListCommand、OverloadedSetCommand和OverloadedLastCommand。

Hi Kingusha23,你能提供更多的信息吗?redisClient是什么类型的?您是直接使用
redis
包,还是围绕它使用基于承诺的包装器?你好,Paul,在我的redis客户端文件中,我确实使用了primisify包装器:import redis,{RedisClient}from'redis';从“util”导入{promisify};const client=redis.createClient({host:process.env.redis_URL});const redisClient={…client,removesync:promisify(client.del).bind(client),};然后当我尝试使用wait redisClient.removeAsync(id)时,我得到了无效的参数error,我只是使用了expire函数。但是谢谢你的解释!