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

ESLint未报告TypeScript编译器类型检查错误,typescript,eslint,typechecking,Typescript,Eslint,Typechecking,正在寻找帮助,以便将TypeScript编译器报告的类型错误输入到ESLint的输出中。库类型脚本eslint()使我认为这应该是可能的 文件结构 src/ ... source files tsconfig.json test/ ... testing files .eslintrc.js package.json tsconfig.json (symlink to src/tsconfig.json) .eslintrc.js module.exports = { 'env

正在寻找帮助,以便将TypeScript编译器报告的类型错误输入到ESLint的输出中。库类型脚本eslint()使我认为这应该是可能的

文件结构

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,
};
package.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.
src/file.ts:xx:xx-错误TS2339:类型“object”上不存在属性“body”。
src/file.ts:xx:xx-错误TS2314:泛型类型“Promise”需要1个类型参数。
src/filets:xx:xx-错误TS7006:参数“err”隐式具有“any”类型。
我是在配置中遗漏了什么,还是在某些方面不合适?或者这不是真正可能的事情


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

我下载了您的存储库,在VS代码中一切都很好。你忘了跑eslint了吗。我运行了
eslint--ext.ts.
tsc-p tsconfig.json
,eslint和tsconfig都在运行。我希望您能解决这个问题。

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

这篇博文介绍了如何在
包.json
中设置
检查类型
脚本以执行此linting函数,并将typescript编译器视为辅助linter。您甚至可以在运行eslint的同一
lint
命令中运行它:

{
  ...
  "scripts": {
    "check-types": "tsc --noemit",
    "eslint": "eslint",
    "lint": "npm run eslint && npm run check-types",
  }
然后将持续集成服务器设置为运行
npm run lint
,作为其构建步骤之一

对于您的编辑器,似乎有一个用于typescript的Atom插件:
这将是在编辑器中显示打字脚本错误的理想方法。VSCode内置了此功能。我主要使用VSCode,它工作得很好

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

{
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}

我创建了一个Git存储库来说明我所经历的不一致性,希望有人能帮助我正确地配置它。您可能更喜欢使用分号,而不是&&-
npm run eslint;npm运行check types
使用&&意味着如果lint命令输出错误,check types命令将不会运行。这是非常正确的!但是,如果使用分号,则会抑制
eslint
命令的退出代码。因此,如果
eslint
失败,但
check-types
成功,那么您的持续集成脚本可能无法捕捉到它失败了。所以这取决于你使用它的目的!当然,我可能应该重申:“如果您想将linting错误视为警告,请使用&”。