使用TypeScript和Node.js连接Redis时遇TS2693错误求助
解决TypeScript中RedisStore类型/值混用的错误
错误原因
你遇到的error TS2693: 'RedisStore' only refers to a type, but is being used as a value here.错误,是因为导入RedisStore时仅引入了类型定义,而非实际可实例化的类,导致TypeScript无法识别它作为构造函数的用途。
解决方案
1. 确认依赖安装
确保已安装核心依赖及对应TypeScript类型包:
npm install connect-redis express-session redis npm install -D @types/connect-redis @types/express-session
2. 修正导入语句
将原来仅导入类型的写法,改为直接导入connect-redis导出的RedisStore类:
// 错误示例(仅导入类型) // import type { RedisStore } from 'connect-redis' // 正确写法 import RedisStore from 'connect-redis';
3. 调整Session配置中的实例化代码
用导入的RedisStore类正常实例化即可,无需额外修改参数结构:
app.use( session({ secret: "reddit_apples_should_be_next", resave: false, saveUninitialized: false, store: new RedisStore({ client: redisCLient }), }) );
完整修正后的代码示例
import express from 'express'; import cors from 'cors'; import { createClient } from 'redis'; import session from 'express-session'; import RedisStore from 'connect-redis'; const app = express(); // 创建Redis客户端 let redisCLient = createClient({ legacyMode: true }); redisCLient.connect().catch(console.error); // 扩展express-session的SessionData类型 declare module "express-session" { interface SessionData { isLoggedIn: boolean; } } // 中间件配置 app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cors()); app.use( session({ secret: "reddit_apples_should_be_next", resave: false, saveUninitialized: false, store: new RedisStore({ client: redisCLient }), }) ); // 后续业务代码...
原理说明
connect-redis的默认导出就是可直接实例化的RedisStore类,而非仅类型。之前的错误源于导入方式错误,仅引入了类型声明,导致TypeScript将其视为类型而非可执行的构造函数。
内容的提问来源于stack exchange,提问作者ked00
相关产品推荐
相关产品推荐

