如何通过Git子模块复用TypeScript核心项目并规避类型检查错误
解决方案
方案1:用TypeScript项目引用(首推)
你的core本身是独立的TypeScript项目,官方推荐用项目引用实现跨项目复用,能让两个项目的编译完全独立,从根源上避免路径冲突问题。
- 先在
sample/src/core目录下创建专属的tsconfig.json,配置核心编译参数并确保生成类型声明文件:
{ "compilerOptions": { "rootDir": "./src", "outDir": "./dist", "declaration": true, // 生成.d.ts类型文件 "module": "ESNext", "target": "ES6", "strict": true }, "include": ["src/**/*"] }
- 回到示例项目根目录,修改
tsconfig.json添加项目引用:
{ "compilerOptions": { "module": "ESNext", "target": "ES6", "strict": true, "baseUrl": "." }, "include": ["src/**/*"], "references": [{"path": "./src/core"}] // 引用core项目 }
- 编译时使用
tsc --build命令,它会自动先编译core生成dist目录,示例项目里直接引用src/core/dist/sample即可,完全不会有路径解析问题。
方案2:配置rootDirs修复路径解析
如果不想折腾项目引用,直接修改示例项目的tsconfig.json,用rootDirs让TypeScript把core的src目录和示例项目的src目录视为同一根目录:
{ "compilerOptions": { "baseUrl": ".", "rootDirs": ["./src", "./src/core/src"], // 将这两个目录当作同一根目录处理 "module": "ESNext", "target": "ES6", "strict": true }, "include": ["src/**/*"] }
这样core里写的import src/a,TypeScript会自动在src/core/src目录下查找a.ts,完美适配原有导入路径。
方案3:编译core后引用(兼顾类型提示与跳过检查)
要是你既想跳过core源码的类型检查,又不想丢失类型提示,可以先把core编译成带类型的包:
- 进入core目录执行
tsc,生成dist目录(包含编译好的JS和.d.ts类型文件)。 - 示例项目的
tsconfig.json按如下配置:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@core/*": ["./src/core/dist/*"] // 用别名指向编译后的core } }, "include": ["src/**/*", "src/core/dist/**/*.d.ts"], // 引入类型文件 "exclude": ["src/core/src/**/*"] // 排除core源码 }
- 示例项目里用
import sample from '@core/sample'引用组件,既不用处理core源码的路径问题,还能正常获得类型提示。
方案4:强制跳过core类型检查(不推荐)
如果完全不在乎类型提示,只想让tsc编译通过,可在tsconfig.json里彻底排除core源码:
{ "compilerOptions": {}, "include": ["src/**/*"], "exclude": ["src/core/**/*"] }
但这样示例项目里引用core的地方会报“找不到模块”的类型错误,需要手动加// @ts-ignore忽略,丢失类型支持,因此不建议这么做。
内容的提问来源于stack exchange,提问作者user1050817
相关产品推荐
相关产品推荐

