TypeScript服务端项目中tsconfig paths配置后无法导入自定义类型的问题求助
解决TypeScript自定义类型导入报错:Module has no exported member
我之前也踩过类似自定义类型导入的坑,结合你的项目情况,咱们一步步排查解决:
问题根源
你在index.d.ts里用declare module "express-custom-types"声明了模块,但导入时用的别名是@custom-types/express-custom-types。TypeScript解析时会把这两个当成完全不同的模块,自然找不到对应的ErrorBody导出成员。
解决方案
方案1:调整类型声明的模块名称,匹配别名路径
把自定义类型文件里的模块声明改成和导入时的别名一致:
// @types/express-custom-types/index.d.ts declare module "@custom-types/express-custom-types" { export type ErrorBody = { type: string; status: number; message: string }; }
这样TypeScript就能直接把你导入的@custom-types/express-custom-types和这个声明对应起来。
方案2:调整paths配置,直接映射到目标模块名
如果你不想修改类型声明的模块名称,可以调整tsconfig.json的paths规则,让原生模块名指向你的自定义类型文件:
"compilerOptions": { // 保留其他配置... "baseUrl": "./", "paths": { "*": ["*"], "express-custom-types": ["@types/express-custom-types/index.d.ts"] } }
之后在errorHandlers.ts里直接用原生模块名导入:
import { ErrorBody } from "express-custom-types";
额外必查项
- 确保
tsconfig.json的include配置包含@types目录,否则TypeScript不会扫描到你的自定义类型文件:"include": ["src/**/*", "@types/**/*"] - 如果用VS Code开发,记得重启TypeScript语言服务(快捷键Ctrl+Shift+P,选择"TypeScript: Restart TS Server"),缓存可能导致配置不及时生效。
验证
修改完成后,重新编译项目或者在编辑器里查看,若报错消失,说明配置已生效。
内容的提问来源于stack exchange,提问作者6991httam
相关产品推荐
相关产品推荐

