如何导出类型定义并通过npm link使用本地包?TS2307错误求助
问题分析与解决方案
针对你开发的tepper库在本地安装后出现TS2307: Cannot find module 'tepper' or its corresponding type declarations的问题,可按以下步骤排查解决:
1. 验证类型文件路径与完整性
- 直接检查库的
dist/types/tepper.d.ts是否存在,且作为类型入口文件包含了所有库的类型定义。 - 进入测试项目的
node_modules/tepper目录,确认dist/types/tepper.d.ts的路径和package.json中exports配置的完全一致,避免编译后路径结构不符的问题。
2. 补充兼容旧版TypeScript的类型配置
虽然你已在exports中配置了types字段,但部分旧版TypeScript(<4.7版本)不支持该解析方式,建议在package.json根目录额外添加:
"types": "./dist/types/tepper.d.ts", "typeVersions": { "*": { "*": ["./dist/types/*"] } }
typeVersions字段可确保不同版本的TypeScript都能正确识别类型文件路径。
3. 检查测试项目的TypeScript配置
- 测试项目的
tsconfig.json中,需将moduleResolution设置为node16或nodenext,这是TypeScript识别exports字段的必要配置;若使用旧版解析策略(node或classic),会忽略exports中的类型配置。 - 确保
module字段与库的模块类型匹配:ESM项目设为ESNext/ES2020,CJS项目设为CommonJS。
4. 排查本地安装的缓存与路径问题
- 确认
npm install --save-dev ../../../..的目录层级正确,测试项目的node_modules/tepper确实存在且包含完整的dist目录和package.json配置。 - 尝试删除测试项目的
node_modules、package-lock.json后重新安装,避免缓存导致的文件缺失问题。
5. 检查库的TypeScript编译配置
- 确认库的
tsconfig.json中,declaration设为true,declarationDir设为./dist/types,确保编译时生成了正确的类型文件。 - 检查
include/exclude配置,避免因规则错误导致部分类型未被编译到dist/types目录中。
内容的提问来源于stack exchange,提问作者Daniel Ramos
相关产品推荐
相关产品推荐

