已完成声明合并仍无法向express-session的session对象赋值属性如何解决
解决方案
报错原因
TypeScript的声明合并仅作用于静态类型校验阶段,不会修改express-session运行时的对象结构。默认req.session.user的初始值为undefined,直接对undefined的userId属性赋值就会触发该报错。
具体修复方法
局部赋值前手动初始化
在给req.session.user的子属性赋值前,先判断并初始化user为空对象:// 先初始化避免undefined if (!req.session.user) { req.session.user = {} } req.session.user.userId = user.id全局统一初始化(推荐)
在express-session中间件注册后新增全局中间件,为所有请求的session统一初始化user属性,不需要每次赋值前单独判断:// express-session原有配置 app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: false, // 其他配置项 })) // 全局初始化session.user app.use((req, res, next) => { if (!req.session.user) { req.session.user = {} } next() })类型声明优化(可选)
可将user声明为可选属性,让类型定义和运行时实际情况对齐,避免类型校验误判:import 'express-session'; declare module 'express-session' { interface Session { user?: { [key: string]: any }; } }
内容的提问来源于stack exchange,提问作者hmrbcnt
相关产品推荐
相关产品推荐

