Ben Awad全栈教程中connectRedis传入session类型不匹配如何解决?
报错原因
这个是TypeScript类型声明冲突导致的,@types/connect-redis自带的express-session类型版本,和你项目本地安装的@types/express-session版本不一致,所以参数类型校验不通过,不属于代码逻辑问题,不会影响实际运行效果。
解决方案
你可以根据自己的需求选择任意一种方案解决:
- 方案1:快速跳过类型校验
直接对报错的参数增加类型断言即可,修改对应代码为:
该方案不需要改动任何依赖和其他代码逻辑,适合快速开发调试。const RedisStore = connectRedis(session as any); - 方案2:固定依赖版本匹配教程
你参考的Ben Awad教程使用的是旧版的connect-redis,直接安装对应版本的依赖即可100%兼容原有写法:
安装完成后重启TypeScript服务,报错就会完全消失。npm i connect-redis@3.4.2 @types/connect-redis@0.0.43 - 方案3:适配新版依赖的API
如果你使用的是v6及以上版本的connect-redis,官方已经调整了API用法,不需要再向connectRedis传递session参数,调整代码即可:- 修改导入语句:
// 替换原来的import connectRedis from "connect-redis" import RedisStore from "connect-redis"- 删掉
const RedisStore = connectRedis(session);这一行代码,初始化session的部分直接写:
store: new RedisStore({ client: redisClient, disableTouch: true }),- 如果你同时使用的是v4及以上版本的redis客户端,需要补充手动连接的逻辑:
const redisClient = redis.createClient(); redisClient.connect().catch(console.error);
内容的提问来源于stack exchange,提问作者sadnapoleon
相关产品推荐
相关产品推荐

