如何在Turborepo中将全局可复用类型迁移至packages/types?
解决Turborepo全局Window类型迁移至packages/types后不生效的问题
问题根源
你手动导入global.d.ts的操作会让这个文件变成普通模块,而不是全局类型定义文件——TypeScript只会把不带export/import语句的.d.ts当作全局类型自动生效,一旦有导入导出,它就只会作用于当前模块,没法扩展全局的Window接口。
解决步骤
1. 调整packages/types里的全局类型文件
在packages/types下保留(或新建)global.d.ts,内容和之前一致,绝对不能加export或import语句:
interface Window { analytics: any; }
2. 配置types包的package.json
给packages/types/package.json加上types字段,告诉TypeScript这个包的入口类型文件路径:
{ "name": "@your-team/types", // 替换成你实际的包名 "version": "0.0.1", "types": "./global.d.ts" }
3. 让每个应用识别全局类型
在每个apps/*目录的tsconfig.json里,把你的types包加入compilerOptions.types数组:
{ "compilerOptions": { // 其他原有配置不变 "types": ["@your-team/types"] } }
4. 禁止手动导入类型文件
彻底删掉应用里所有类似import '@your-team/types/global.d.ts'的语句——只要配置到位,TypeScript会自动加载这个全局类型,无需手动引入。
验证方式
随便找一个应用的代码,直接编写window.analytics,TypeScript应该能正常识别该属性,不会抛出类型错误。
内容的提问来源于stack exchange,提问作者launchpad5682
相关产品推荐
相关产品推荐

