TypeScript 5.2.2 + Redis 4.6.8 参数类型不兼容错误求助
解决Redis客户端
get方法参数类型不兼容问题 问题原因
你使用的Redis客户端(如@redis/client v4+版本)已废弃回调式API,所有命令默认返回Promise。当前代码传入回调函数,不符合客户端的类型定义,因此触发参数类型不兼容错误。
修复方案
将回调写法改为async/await的Promise风格,适配当前Redis客户端的API规范:
修改后的/room接口代码:
app.get('/room', async (req, res) => { try { // 用await获取Redis返回的Promise结果 const reply = await client.get('room'); if (reply !== null) { return res.json(JSON.parse(reply)); } // 处理房间数据不存在的情况 res.status(404).json({ message: '房间数据不存在' }); } catch (err) { // 捕获Redis查询异常并返回错误响应 res.status(500).json({ error: '获取房间数据失败' }); } });
同时建议完善loadRoom函数的set操作,加上await确保数据写入完成:
const loadRoom = async () => { await client.connect(); const newRoom: Room = { id: 0, space: generateRandomSpaceWithoutNulls() }; printRoom(newRoom); // 等待Redis写入操作完成 await client.set("room", JSON.stringify(newRoom)); };
额外说明
如果项目确实需要回调风格,需降级到Redis客户端v3版本,但不推荐——v4+的Promise API更贴合现代Node.js异步编程习惯,也能避免回调地狱问题。
内容的提问来源于stack exchange,提问作者Gaston Valles
相关产品推荐
相关产品推荐

