Typescript文件编译完成后为什么要执行ESlint?

Why shoudl TSlint be executed after Typescript files is compiled?

根据TSLint官方的说法,TSLint只有在Typescript代码编译完成后才会执行。这背后的原因是什么?

官方 TSLint 文档:https://palantir.github.io/tslint/usage/cli/

TSLint 针对它从 TypeScript 接收到的经过解析的 AST(抽象语法树)运行。如果它从 TypeScript 接收到的 AST 有错误,它的规则逻辑可能会做出一些不正确的假设。

定义其中的一些术语:

  • AST:linter 将分析的代码的树状表示。您可以尝试 astexplorer.net 看看它是什么样子;这很漂亮!
  • 语法错误:如果您编写的代码如 led foo = "bar"; led 而不是 let。 TypeScript 将创建与您预期不同的代码表示。
  • 语义错误:如果您编写的代码没有语法错误,但类型检查器发现有问题,例如 let foo: number = "bar";.

TSLint 有一个开放的问题来讨论它是否不应该费心检查有语法或语义错误的代码:https://github.com/palantir/tslint/issues/3808

另外两点支持在无效源文件上不 运行 TSLint:

  • 很多人都难以区分 TS 和 TSLint 错误,因此当无效文件导致 大量 的 lint 错误时可能会造成混淆
  • 未编译的 TS 代码在修复后往往会出现不同的 linting 问题,因此要求人们将它们与 TS 错误一起修复有点浪费