如何在TypeScript类型检查中跳过未被导入的文件且不影响正常引用
可行方案推荐
方案1:批量给生成的Relay类型文件添加// @ts-nocheck注释
这是成本最低、效果最直接的方案:
- 可直接在Relay的代码生成配置里自定义输出文件的头部前缀,统一加上
// @ts-nocheck注释 - 效果:TS会完全跳过对这些文件的类型检查,但文件里导出的类型依然可以被其他文件正常导入使用,不会出现找不到类型的报错
- 适配场景:所有版本TS都支持,不需要修改其他配置,符合你确认生成文件无类型错误的前提
方案2:将生成类型文件改为.d.ts后缀+开启skipLibCheck
如果Relay生成配置支持输出声明文件格式,可做如下调整:
- 配置Relay将生成的类型文件后缀从
.ts改为.d.ts - 在项目根
tsconfig.json中开启skipLibCheck: true配置 - 效果:
skipLibCheck会跳过所有.d.ts文件的类型检查,不会校验声明文件内部的类型逻辑,但依然可以正常读取这些声明文件里的类型供业务代码使用 - 注意:如果项目本来就有其他手写
.d.ts需要检查,可以单独给这些自动生成的.d.ts配置目录级别的tsconfig,不需要全局开启skipLibCheck
方案3:使用TypeScript项目引用(Project References)拆分编译单元
针对超大型项目更规范的长期方案:
- 在
src/types/目录下新增独立的tsconfig.json,配置参考:{ "compilerOptions": { "composite": true, "noEmit": true, "skipLibCheck": true }, "include": ["**/*"] } - 在根目录的
tsconfig.json中添加references配置:{ "references": [{"path": "src/types"}] } - 效果:TS会把
src/types当做独立的编译单元,只有这个目录下的文件发生变化时才会重新检查,日常增量编译业务代码时不会重复检查这部分文件 - 额外收益:后续如果有其他独立的生成代码目录,也可以用同样方式拆分,进一步降低增量编译耗时
方案4:定期清理未引用的生成文件
从根源减少需要检查的文件数量:
- 写个简单的Node脚本,在每次Relay生成类型之后执行:
- 扫描
src/types/下所有文件的导出名称 - 全局搜索业务代码里的import语句,匹配没有被任何地方引用的文件
- 自动删除这些未引用的冗余文件
- 扫描
- 适配场景:冗余生成文件占比很高的情况,不仅能降低类型检查耗时,还能减少项目体积
内容的提问来源于stack exchange,提问作者Jelle Zijlstra
相关产品推荐
相关产品推荐

