开启noUnusedLocals后TypeScript编译未抛出对应报错问题咨询
问题解答
该现象属于正常情况,核心和你当前的技术栈编译流程、TS校验逻辑有关,具体原因如下:
- Next.js 默认的编译链路没有执行全量TS类型检查。你看到的webpack编译阶段,Next.js底层用
babel-loader或swc完成TS到JS的代码转译,这两个工具仅做语法转换,不会执行完整的TS类型校验逻辑,因此哪怕tsconfig中开启了noUnusedLocals,转译阶段也不会触发对应报错。TS本身的类型检查(包含noUnusedLocals等规则校验)需要单独执行tsc命令才会触发全量扫描。 - 你的tsconfig中
noEmit配置为false,但Next.js默认不会主动调用tsc做编译前置校验,只有手动执行tsc命令、或者在CI/CD流程中配置了tsc校验步骤时,未使用局部变量等TS规则错误才会被tsc抛出。 - 代码检查工具(如ESLint配合@typescript-eslint插件)的校验逻辑独立于TS编译流程,扫描代码时会直接读取自身规则或tsconfig中的对应配置,因此可以正常检测到未使用变量问题,和tsc是否执行了校验没有关联。
可选优化方案
- 可以在package.json的scripts中新增TS校验命令:
"type-check": "tsc --noEmit",本地开发或代码提交前执行该命令即可拿到tsc的全量校验结果。 - 如果希望Next.js构建阶段就触发TS错误拦截,可以在next.config.js中新增配置
typescript: { ignoreBuildErrors: false },但要注意该配置会在每次构建时执行全量TS校验,会一定程度增加构建耗时。 - 也可以将
noUnusedLocals这类代码风格类规则统一交给ESLint管理,关闭tsconfig中的对应配置,避免两套校验规则带来的混淆。
内容的提问来源于stack exchange,提问作者aa bb
相关产品推荐
相关产品推荐

