web-dev-qa-db-ja.com

ESLintがTypeScriptコンパイラのタイプチェックエラーを報告しない

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,
};

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.

構成に何か不足していますか、それとも何らかの形で不適切ですか?それとも実際に可能なことではないでしょうか?

プロジェクトで作業しているときにエディターにリンティングエラーが表示されるので、ESLintを介してエラーレポートを取得したいのですが。 Atom( https://atom.io/ )を使用していますが、VSCodeやVIMでも機能するようにしたいと思います。チームメンバーは別の編集者を好みます。

2
kalisjoshua

残念ながら、ESLintは自身のリンターからのエラーのみを報告し、TypeScriptコンパイルの失敗は報告しません。私はあなたに共感します-私のプロジェクトでは、より速いTypeScriptトランスパイルのためにBabelを使用しますが、Babelは実際には型をチェックしない(削除するだけです)ので、別のlintステップとしてその型チェックが必要です。

このブログ投稿 https://iamturns.com/TypeScript-babel/ は、check-types内にpackage.jsonスクリプトを設定して、このリンティング機能を実行し、処理する方法を説明していますTypeScriptコンパイラーを2番目のリンターとして。 eslintを実行するのと同じlintコマンド内で実行することもできます。

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

次に、ビルドステップの1つとしてnpm run lintを実行するように継続的インテグレーションサーバーを設定します。

あなたのエディターには、Atomプラグインがあるようです: https://atom.io/packages/atom-TypeScript
これは、TypeScriptエラーをエディターに表示する理想的な方法です。 VSCodeにはこの機能が組み込まれています。私は主にVSCodeを使用していますが、うまく機能します!

VSCodeに推奨する最後の設定は、eslintの「自動修正」機能をVSCodeのeslintプラグインと一緒に使用し、ファイルを保存するたびにeslintを実行するように構成することです。これは、プロジェクトごとに.vscode/settings.json内で行います。

{
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}
6
Gordon Burgett

私はあなたのリポジトリをダウンロードし、すべてがVS Codeでうまくいきました。 eslintの実行を忘れましたか?私は走ったeslint --ext .ts .およびtsc -p tsconfig.json、eslintとtsconfigの両方が実行されていました。あなたがこれを解決できるといいのですが。

0
0-0