如何在tsserver+JSDoc环境下扩展express.Request的自定义属性
解决步骤
1. 修正tsconfig.json的include配置
你当前配置的include字段仅匹配了src目录下的js文件,根目录@types文件夹内的.d.ts声明文件没有被tsserver识别加载,首先需要新增声明文件的匹配规则:
{ "compilerOptions": { // 保留原有所有配置不变 }, "include": ["src/**/*.js", "./@types/**/*.d.ts"], "exclude": ["node_modules"] }
修改完成后重启tsserver(vim环境可执行:LspRestart或者对应LSP插件的重启命令,清除旧缓存)。
2. 修正Express类型扩展写法
打开./@types/types.d.ts文件,确保声明合并的写法符合规范,两种写法二选一即可:
全局命名空间扩展写法
import express from "express"; declare global { namespace Express { interface Request { // 可按实际业务替换成user对象的具体类型定义,暂时不确定类型可以写any user?: { id: string; username: string; // 补充user对象的其他字段 } } } }
模块扩充写法
declare module "express-serve-static-core" { interface Request { user?: any; // 替换为实际的user类型即可 } }
3. 生效验证
完成以上操作后,检查原有报错的req.user位置,类型报错会自动消失。
如果仍有报错,可检查@types文件夹路径、文件名是否拼写正确,确认.d.ts文件没有语法错误即可
内容的提问来源于stack exchange,提问作者root-aj
相关产品推荐
相关产品推荐

