ESLint 不报告 TypeScript 编译器类型检查错误
ESLint not reporting TypeScript compiler type checking errors
寻求帮助,将 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 获取错误报告,因为我在处理项目时在编辑器中显示了 linting 错误。我正在使用 Atom (https://atom.io/),但我也希望它适用于 VSCode,也可能适用于 VIM;团队成员喜欢不同的编辑器。
不幸的是,ESLint 只报告来自它自己的 linter 的错误,它不报告 typescript 编译失败。我很同情你——在我的项目中,我使用 Babel 来更快地转换打字稿,但由于 Babel 实际上并不检查类型(它只是删除它们),我仍然需要将类型检查作为一个单独的 lint 步骤。
此博客 post https://iamturns.com/typescript-babel/ 描述了如何在 package.json
中设置 check-types
脚本来执行此 linting 功能,并将打字稿编译器视为二级棉绒。您甚至可以在 运行 eslint:
的同一个 lint
命令中使用它 运行
{
...
"scripts": {
"check-types": "tsc --noemit",
"eslint": "eslint",
"lint": "npm run eslint && npm run check-types",
}
然后将持续集成服务器设置为 运行 npm run lint
作为其构建步骤之一。
对于您的编辑器,似乎有一个用于打字稿的 Atom 插件:https://atom.io/packages/atom-typescript
这将是让您的打字稿错误显示在您的编辑器中的理想方式。 VSCode 内置了此功能。我主要使用 VSCode,效果很好!
我为 VSCode 推荐的最后一个设置是将 eslint 的 "auto fix" 功能与 VSCode 的 eslint 插件一起使用,并将其配置为 运行 eslint每当您保存文件时。您在 .vscode/settings.json
中以每个项目为基础执行此操作:
{
"editor.codeActionsOnSave": {
"source.fixAll": true
}
}
您可以使用以下设置报告 TypeScript type-checking 错误:
"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"
]
},
最后到 运行 脚本检查 linting 和 type-checking 错误,您可以使用以下命令:
yarn type-check && lint-staged
寻求帮助,将 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 获取错误报告,因为我在处理项目时在编辑器中显示了 linting 错误。我正在使用 Atom (https://atom.io/),但我也希望它适用于 VSCode,也可能适用于 VIM;团队成员喜欢不同的编辑器。
不幸的是,ESLint 只报告来自它自己的 linter 的错误,它不报告 typescript 编译失败。我很同情你——在我的项目中,我使用 Babel 来更快地转换打字稿,但由于 Babel 实际上并不检查类型(它只是删除它们),我仍然需要将类型检查作为一个单独的 lint 步骤。
此博客 post https://iamturns.com/typescript-babel/ 描述了如何在 package.json
中设置 check-types
脚本来执行此 linting 功能,并将打字稿编译器视为二级棉绒。您甚至可以在 运行 eslint:
lint
命令中使用它 运行
{
...
"scripts": {
"check-types": "tsc --noemit",
"eslint": "eslint",
"lint": "npm run eslint && npm run check-types",
}
然后将持续集成服务器设置为 运行 npm run lint
作为其构建步骤之一。
对于您的编辑器,似乎有一个用于打字稿的 Atom 插件:https://atom.io/packages/atom-typescript
这将是让您的打字稿错误显示在您的编辑器中的理想方式。 VSCode 内置了此功能。我主要使用 VSCode,效果很好!
我为 VSCode 推荐的最后一个设置是将 eslint 的 "auto fix" 功能与 VSCode 的 eslint 插件一起使用,并将其配置为 运行 eslint每当您保存文件时。您在 .vscode/settings.json
中以每个项目为基础执行此操作:
{
"editor.codeActionsOnSave": {
"source.fixAll": true
}
}
您可以使用以下设置报告 TypeScript type-checking 错误:
"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"
]
},
最后到 运行 脚本检查 linting 和 type-checking 错误,您可以使用以下命令:
yarn type-check && lint-staged