TypeScript中Express.Router()报TS2339错误的解决求助
TypeScript + Express 路由类型错误排查求助
我在使用TypeScript开发Node.js/Express应用时,持续遇到编译时错误:
Property 'Router' does not exist on type 'typeof import("express")'.
触发错误的代码示例:
import * as express from 'express'; const router = express.Router(); // TS2339错误
尝试切换为默认导入(import express from 'express';)后,要么仍报Router不存在,要么会出现Property 'default' does not exist on type 'typeof import("express")'的错误。
已尝试的操作
- 检查
tsconfig.json,确认"esModuleInterop": true和"allowSyntheticDefaultImports": true均已设置为true - 确认依赖版本:安装了
express@^4.21.2、@types/express@^4.17.21,移除了可能冲突的@types/express-serve-static-core - 删除
node_modules并重新安装所有依赖,清除版本冲突 - 重启VS Code并清除TypeScript服务器缓存
补充信息
本地和GitHub Actions中运行npm run build(调用tsc)均编译失败,错误日志如下:
Error: src/domain/auth/auth.routes.ts(12,24): error TS2339: Property 'default' does not exist on type 'typeof import("express")'. Error: src/domain/care-team/care-team.routes.ts(13,24): error TS2339: Property 'Router' does not exist on type 'typeof import("express")'. Error: src/domain/document/document.routes.ts(7,24): error TS2339: Property 'default' does not exist on type 'typeof import("express")'. Error: src/domain/patient/patient.routes.ts(11,24): error TS2339: Property 'Router' does not exist on type 'typeof import("express")'. Error: src/domain/routes.ts(12,29): error TS2339: Property 'Router' does not exist on type 'typeof import("express")'. Error: src/index.ts(14,36): error TS2339: Property 'default' does not exist on type 'typeof import("express")'. Error: Process completed with exit code 2.
我的tsconfig.json配置如下:
{ "compilerOptions": { "target": "es2020", "module": "commonjs", "lib": ["es2020"], "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "resolveJsonModule": true, "outDir": "./dist", "rootDir": "./src", "baseUrl": ".", "paths": { "@/*": ["src/*"] }, "typeRoots": ["./node_modules/@types", "./src/types"], "declaration": true, "sourceMap": true, "allowSyntheticDefaultImports": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
后续尝试的额外操作
- 将
import * as express from 'express'改为import express from 'express':修复了default不存在的错误,但Router不存在的问题依然存在 - 移除
express.default.Router()写法,改用const router = express.Router();,但tsc仍报错 - 再次确认依赖:
express版本为^4.21.2,@types/express版本为^4.17.21,未显式安装@types/express-serve-static-core - 使用
"resolutions": { "@types/express": "4.17.21" }固定类型版本,删除node_modules重装,无效 - 检查
./src/types目录,无本地express.d.ts文件,也未找到自定义的declare module 'express'代码覆盖标准类型
核心疑问
我预期import express from 'express';后,执行const router = express.Router();能正常编译,但TypeScript始终报TS2339错误。请问可能是什么因素覆盖或冲突了Express的标准类型?如何进一步调试解决?
内容的提问来源于stack exchange,提问作者jalexander
相关产品推荐
相关产品推荐

