You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:25:19