当前位置: 首页 > 知识库问答 >
问题:

ESLint没有报告TypeScript编译器类型检查错误

闻华容
2023-03-14

寻求帮助,将TypeScript编译器报告的类型错误输入到ESLint的输出中。库typescript eslint(https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/TYPED_LINTING.md)让我觉得这应该是可能的。

文件结构

src/
  ... source files
  tsconfig.json
test/
  ... testing files
.eslintrc.js
package.json
tsconfig.json (symlink to src/tsconfig.json)

.eslintrc.js

module.exports = {
  'env': {
    'jest': true,
    'node': true,
  },
  'extends': [
    'airbnb-typescript/base',
    'plugin:@typescript-eslint/eslint-recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:@typescript-eslint/recommended-requiring-type-checking',
    'plugin:jest/recommended',
  ],
  'parser': '@typescript-eslint/parser',
  'parserOptions': {
    'project': ['./tsconfig.json'],
    'tsconfigRootDir': __dirname,
  },
  'plugins': [
    '@typescript-eslint',
    'jest',
  ],
  'root': true,
};

包.json

{
  "name": "...",
  "version": "...",
  "description": "...",
  "scripts": {},
  "devDependencies": {
    "@types/jest": "^25.1.3",
    "@typescript-eslint/eslint-plugin": "^2.21.0",
    "@typescript-eslint/parser": "^2.21.0",
    "eslint": "^6.8.0",
    "eslint-config-airbnb-typescript": "^7.0.0",
    "eslint-plugin-import": "^2.20.1",
    "eslint-plugin-jest": "^23.8.1",
    "jest": "^25.1.0",
    "nock": "^12.0.2",
    "ts-jest": "^25.2.1"
  },
  "dependencies": {
    "@types/node": "^13.7.7",
    "aws-sdk": "^2.630.0",
    "jsonschema": "^1.2.5",
    "typescript": "^3.8.3"
  }
}

ESLint的输出为空-没有错误-但是在运行TypeScript编译器以构建项目时,报告了许多错误;例如:

src/file.ts:xx:xx - error TS2339: Property 'body' does not exist on type 'object'.
src/file.ts:xx:xx - error TS2314: Generic type 'Promise<T>' requires 1 type argument(s).
src/filets:xx:xx - error TS7006: Parameter 'err' implicitly has an 'any' type.

我是在配置中遗漏了什么,还是在某种程度上不恰当?或者这不是实际上可能的事情?

我希望通过ESLint报告错误,因为在我处理项目时,我的编辑器中显示了linting错误。我正在使用Atom(https://atom.io/)但我也希望这能适用于VSCode,也可能适用于VIM;团队成员更喜欢不同的编辑器。

共有2个答案

云慈
2023-03-14

您可以使用以下设置报告TypeScript类型检查错误:

  "scripts": {
     "lint": "eslint src/**/*.{ts,tsx}",
     "lint:fix": "eslint src/**/*.{ts,tsx} --fix",
     "prettify": "prettier --write src/**/*.{ts,tsx}",
     "type-check": "tsc --noEmit",
   },
  "lint-staged": {
     "*.{ts,tsx}": [
       "eslint",
       "prettier --write",
       "git add"
     ]
   },

最后,要运行脚本来检查lint和类型检查错误,您可以使用以下命令:

yarn type-check && lint-staged
东方飞捷
2023-03-14

不幸的是,ESLint只报告来自它自己的linter的错误,它不报告typescript编译失败。我很同情你——在我的项目中,我使用Babel来更快地传输类型脚本,但由于Babel实际上并不检查类型(它只是删除它们),我仍然需要将类型检查作为一个单独的lint步骤。

这篇博文https://iamturns.com/typescript-babel/描述了如何在您的package.json中设置检查类型脚本来执行此lint函数,并将typecript编译器视为辅助linter。您甚至可以让它在运行eslint的相同lint命令中运行:

{
  ...
  "scripts": {
    "check-types": "tsc --noemit",
    "eslint": "eslint",
    "lint": "npm run eslint && npm run check-types",
  }

然后,您将设置持续集成服务器以运行npm run lint作为其构建步骤之一。

对于您的编辑器,似乎有一个用于typescript的Atom插件:https://atom.io/packages/atom-typescript
这将是在编辑器中显示typescript错误的理想方法。VSCode内置了此功能。我主要使用VSCode,效果很好!

我建议VSCode的最后一个设置是将eslint的“自动修复”功能与VSCode的eslint插件一起使用,并将其配置为在保存文件时运行eslint。您可以在.vscode/settings中执行此操作。基于每个项目的json:

{
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}
 类似资料:
  • 背景: 在vue3+ts+vite项目中: vue文件:import.meta.env代码能正常访问 ts文件:import.meta.env文件有编译报错 尝试1: 在tsconfig.json中添加"types": [ "vite/client" ]

  • 我正在处理检查的异常,并在两者之间发现编译器在检查的异常上没有显示任何错误并且工作正常的情况。 请让我知道原因,我谷歌了很多,但没有找到任何东西。

  • 所以我看到它找不到promise和地图。

  • 我被困了几个小时,无法释放它。 它给了我常规的通常我会在代码中的某个地方发现错误,或者只是在模块上运行inspector,它会检测错误,修复错误后,构建工作正常。 这一次,我和检查员都没有发现代码中的任何错误。 它发生在我试图整合Algolia之后。但是我试图恢复我所做的一切,错误仍然存在。我如何摆脱它? 编辑:我现在看到kotlin编译器给了我错误。它说有几个函数: 在我的设置中,kotlin被

  • 所以当我不使用我的maven实现时,我在编译我的应用程序时遇到了麻烦。它将编译没有任何麻烦与maven-gwt-plugin。 我收到的错误表示生成器无法获取其请求的类信息: 显然,该类存在并在maven实现中工作。我不明白为什么在使用eclipse“Java应用程序”运行配置进行标准构建时它不起作用。以下是我的跑步配置的设置: 有人知道这是怎么回事吗?