正在寻找帮助,将TypeScript编译器报告的类型错误输入到ESLint的输出中.库类型脚本eslint(https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/TYPED_LINTING.md)使我认为这应该是可能的.

File structure

src/
  ... source files
  tsconfig.json
test/
  ... testing files
.eslintrc.js
包裹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;团队成员更喜欢不同的编辑.

推荐答案

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

这篇博文https://iamturns.com/typescript-babel/介绍了如何在package.json中设置check-types脚本来执行这个linting函数,并将typescript编译器视为辅助linter.甚至可以在运行eslint的同一个lint命令中运行它:

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

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

对于您的编辑器,似乎有一个用于typescript:https://atom.io/packages/atom-typescript的Atom插件

我建议VSCode的最后一个设置是将eslint的"自动修复"功能与VSCode的eslint插件一起使用,并将其配置为在保存文件时运行eslint.在每个项目的基础上,你可以在.vscode/settings.json内完成这项工作:

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

Typescript相关问答推荐

"@ clerker/nextjs/server没有名为clerkMiddleware的导入成员'

脉轮ui打字脚本强制执行图标按钮的咏叹调标签-如何关闭

Angular 17 -如何在for循环内创建一些加载?

了解TS类型参数列表中的分配

Angular 17 Select 错误core.mjs:6531错误错误:NG 05105:发现意外合成监听器@transformPanel.done

TS不推断类型在条件判断后具有属性'

扩展函数签名中的参数类型,而不使用泛型

如何在TypeScript中将一个元组映射(转换)到另一个元组?

为什么我的一个合成函数不能推断类型?

在Typescript 中,有没有`index=unfined的速记?未定义:某个数组[索引]`?

如何在NX工作区项目.json中设置类似angular.json的两个项目构建配置?

剧作家元素发现,但继续显示为隐藏

我在Angular 17中的environment.ts文件中得到了一个属性端点错误

TypeScrip:如何缩小具有联合类型属性的对象

在抽象类构造函数中获取子类型

如何在TypeScript中描述和实现包含特定属性的函数?

如何使用 AWS CDK 扩展默认 ALB 控制器策略?

Typescript 和 Rust 中跨平台的位移数字不一致

如何为字符串模板文字创建类型保护

如何让 Promise 将它调用的重载函数的类型转发给它自己的调用者?