@typescript-eslint/recommended-type-checked 未检测到函数参数类型错误的问题排查
@typescript-eslint/recommended-type-checked 未检测到函数参数类型错误的问题排查
我最近碰到了一个挺让人困惑的问题:明明代码里调用函数时传了错误类型的参数,TypeScript编译器能正常报错,但集成了ESLint v8.57.1和TypeScript插件后,运行ESLint却完全没检测到这个错误。反而用npx tsc -noemit能轻松揪出问题。
举个例子,我写了这样的函数:
function test(a: string, b: number) { // 函数逻辑省略 } // 这里传了boolean类型的参数,TS编译器会报错,但ESLint毫无反应 test(true);
我已经按照官方文档配置了带类型检查的ESLint,配置文件如下:
// 基于expo的ESLint配置 module.exports = { parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 2021, sourceType: 'module', project: './tsconfig.json', }, ignorePatterns: ['/dist/*'], extends: [ 'expo', 'plugin:react/recommended', 'plugin:prettier/recommended', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-type-checked', ], plugins: ['@typescript-eslint', 'prettier'], rules: { 'prettier/prettier': 'error', 'react/react-in-jsx-scope': 'off', 'react/prop-types': 'off', '@typescript-eslint/no-require-imports': 'off', '@typescript-eslint/no-explicit-any': 'off', }, overrides: [ { files: ['*.js'], extends: ['plugin:@typescript-eslint/disable-type-checked'], }, ], };
根据官方文档,@typescript-eslint/recommended-type-checked预设应该能检测这类类型错误才对,针对这个问题,我整理了几个排查方向:
- 确认tsconfig.json的范围配置:先检查你的
tsconfig.json里的include字段,确保出现错误的文件被包含在内。如果目标文件不在include列表里,ESLint的类型检查模块就无法获取到正确的类型信息,自然会跳过错误检测。 - 验证tsconfig路径是否正确:检查ESLint配置里
parserOptions.project的路径是否准确。如果你的ESLint配置文件不在项目根目录,相对路径可能需要调整,比如写成../tsconfig.json。 - 检查插件版本兼容性:确保
@typescript-eslint/eslint-plugin和@typescript-eslint/parser的版本与ESLint v8.57.1兼容。版本不匹配很可能导致类型检查功能失效,建议查看官方兼容性说明,或者统一升级到匹配的版本。 - 排查文件后缀是否被覆盖规则影响:你的配置里针对
.js文件禁用了类型检查,如果出错的文件后缀有误(比如本该是.ts却写成了.js),就会触发这条禁用规则,导致ESLint不做类型检查。 - 手动开启具体规则:虽然预设应该包含相关检查,但可以尝试手动开启
@typescript-eslint/no-unsafe-argument规则,在rules里添加:
看看是否能检测到参数类型错误。'@typescript-eslint/no-unsafe-argument': 'error'
备注:内容来源于stack exchange,提问作者Zorayr
相关产品推荐
相关产品推荐

