linting Javascript 和 Typescript 应用程序有什么好处

What's the benefits of linting Javascript and Typescript applications

我已经在 SO 上搜索了这个问题的综合答案,但我似乎找不到任何答案,所以我希望能得到一个关于 Typescript 和 Javascript 中 linting 应用程序的好处的综合答案,或 link 这样的答案。

自从我开始编写 Typescript 代码以来,我一直在对应用程序进行 linting,而 linting 对我来说是常识,编写干净的代码给人一种很好的感觉。但是,我偶然发现了一个充斥着 linting 错误的 Typescript 代码,并且我的代码编辑器每隔几行就会出现错误。显然这感觉不太好,但我想知道为什么建议在发布 JS/TS 应用程序之前对其进行 lint,特别是因为我目前必须处理的应用程序似乎从未检查过 TS linting错误,他们工作没有任何问题?仅仅是因为它干净还是有任何性能或其他好处?

Linter 的存在是为了指出常见的可能 有问题的代码模式,基于整个社区的多年经验,尤其是 linter 的创建者。大多数 linter 也可以使用自定义规则进行扩展,如果您出于某种原因需要在特定项目中强制执行自定义约定。

可能 有问题并不意味着代码会实际上 在特定情况下产生错误。但是避免此类 潜在 问题而使用 已知更好的模式 肯定更好。 Linters 通常是极端保守的,这并不意味着不太保守的代码 不能 工作。但是不要抱怨没有人告诉你,如果你冒险进入这样的领域并产生错误。

我喜欢 https://www.jslint.com/help.html 的理由:

If a feature is sometimes useful and sometimes dangerous and if there is a better option then always use the better option.

...

When C was a young programming language, there were several common programming errors that were not caught by the primitive compilers, so an accessory program called lint was developed that would scan a source file, looking for problems.

As the language matured, the ... compilers got better at issuing warnings. lint is no longer needed.

JavaScript is a young-for-its-age language. It was originally intended to do small tasks in webpages ... Many of the features that were intended to make the language easy to use are troublesome when projects become complicated. A lint for JavaScript is needed ...

恕我直言,下一代 linter(例如 eslint)采用了这一核心理念,但用可配置的选项取代了一些强烈的意见,以覆盖更广泛的受众。添加了框架插件。添加了选项来解决代码格式问题,而不仅仅是潜在危险的功能。人们不同意某些选项,固执己见的格式化程序找到了自己的利基(例如 prettier)。

Typescript 似乎将最重要的代码质量规则作为编译器核心的一部分实施,而更具争议性的规则留给了外部 linter(例如 tslint),供决定执行一致代码的团队使用样式(以提高可读性,...)。

不确定一致的代码风格在多大程度上提高了代码质量,但我有理由相信它不会降低质量并且可能带来巨大的好处(如果我发现值得信赖对该主题的研究,我将添加到此答案中。