如何从深度导出的自定义TypeScript库导入对象?导入类型失败排查
自定义TypeScript库类型导入失败问题排查
问题背景
更新库目录结构后,本地开发时可正常导入类型,但外部项目安装库后,使用import { Site, User } from '@xxx/<my-lib>'会报错Module "<my-lib>" has no exported member "<my-type>"。
核心问题与解决方法
1. 修正package.json的入口配置
当前package.json的main字段指向源码目录的src/index.js,但发布后的库应该指向编译后的dist目录文件;同时缺少types字段指定类型声明文件,导致外部项目无法识别类型。
修改package.json中的对应字段:
{ "main": "dist/src/index.js", "types": "dist/src/index.d.ts", // 其他原有字段保留 }
2. 调整内部导入路径
库内文件使用了绝对路径+.js后缀的导入方式(如src/business/entities/site.js),不符合TypeScript模块解析规范,容易导致编译后路径错误。
将entities.ts和index.ts中的导入改为相对路径(省略后缀):
src/business/entities.ts修正后:
export { Site, SiteInterface } from "./entities/site"; export { User, UserInterface } from "./entities/user";
src/index.ts修正后:
export * from "./business/entities"; export * from "./business/usecases";
3. 确认类型声明文件生成
检查tsconfig.json中declaration: true是否开启,执行npm run build后,查看dist/src目录下是否生成了对应的.d.ts文件(如index.d.ts、business/entities.d.ts等)。若未生成,需确保include字段覆盖所有源码文件:
"include": ["src/**/*"]
4. 本地验证(可选)
在本地测试项目中通过npm link链接当前库,执行导入测试,确认类型可正常识别后再发布。
内容的提问来源于stack exchange,提问作者Azelytof
相关产品推荐
相关产品推荐

