为何TypeScript代码检查要用eslint+typescript-eslint而非tsc?
TypeScript代码检查:typescript-eslint并非毫无作用,不该移除
别着急移除typescript-eslint,它和tsc是各司其职的关系,完全没法互相替代:
核心职责差异
- tsc是TypeScript官方编译器,主打类型系统校验,比如你提到的
const apple: pink = 'apple'里pink未定义的错误,属于类型范畴,这是tsc的本职工作。 - typescript-eslint是ESLint的TypeScript适配层,核心作用是让ESLint能正确解析TS语法,同时提供TS专属的代码质量/风格规则,它不负责类型校验——这本来就不是它的活。
typescript-eslint的实际作用
它能帮你做很多tsc管不到的事:
- 检查JS/TS通用的不良代码模式:比如未使用的变量(比tsc的
noUnusedLocals更灵活,可配置忽略规则)、不必要的分号、变量声明不规范等。 - 提供TS专属的代码规则:比如
@typescript-eslint/no-explicit-any(禁止随便用any)、@typescript-eslint/prefer-const-enum(优先用const enum)、@typescript-eslint/no-empty-interface(禁止空接口)等,这些规则能帮你写出更规范的TS代码,但tsc不会管。 - 让ESLint正确识别TS语法:如果移除它,ESLint会把TS代码当JS解析,遇到类型注解、接口这类TS语法,大概率会报语法错误——你之前测试“移除后仍能运行”只是刚好代码足够简单而已。
正确的严格检查方案
两者配合才是最优解:
- 用
tsc --noEmit --strict做严格类型校验,确保类型安全。 - 用ESLint + typescript-eslint做代码风格和质量校验,推荐启用
eslint:recommended+@typescript-eslint/recommended+@typescript-eslint/strict-type-checked规则集,覆盖更多TS专属的代码问题。
所以说,typescript-eslint在代码检查里是必不可少的,完全不该移除。
内容的提问来源于stack exchange,提问作者menglinmaker
相关产品推荐
相关产品推荐

