Tslint: 路线图:TSLint -> ESLint

创建于 2019-02-23  ·  52评论  ·  资料来源: palantir/tslint

正如您在这篇博文中所读到的,我们计划在 2019 年弃用 TSLint,并支持迁移到 ESLint 作为 TypeScript 和 JavaScript 的标准 linter。 这不会立即被弃用; 相反,要确保顺利过渡到新工具而不会出现任何倒退,还有很多工作要做。 我们希望在迁移中保留 TSLint 中的一些特性、测试套件和便利性。 可能有一段时间这两个工具之间存在重叠,建议 TSLint 早期采用者运行_both_ linter 以确保完整的代码检查覆盖率(在合理的程度上,使性能不会受到严重影响)。

我将在这个 repo 中关闭一些现在感觉超出范围的功能请求,因为我们希望它们在 ESLint / typescript-eslint路线图中得到处理。 __new feature requests__ 最有可能被关闭/拒绝的一类规则的一个示例是格式化规则很长一段时间以来,我一直建议拆分这些规则,因为我们在 Palantir 使用 Prettier,并认为它是格式化代码工作的更好工具。

TSLint 将继续发布重要的错误修复和更新,使其与最新的编译器/语言功能保持同步。


更新(2019 年 6 月):更具体的路线图时间表,与@JoshuaKGoldberg和 tslint-contrib-microsoft 协调:

  • __2019 年 8 月 1 日__:停止接受新的 _core_ 规则。 仍然接受错误修复、次要功能和规则增强。 自定义规则始终是一个选项,可以在此 repo 之外维护。
  • __2019 年 11 月 1 日__:停止接受功能或规则增强(使迁移到 typescript-eslint 更容易的功能或规则增强功能除外)。 仍然接受错误修复。
  • __2020 年 1 月 1 日__:停止接受除安全修复和对因破坏 TypeScript 更改而引入的崩溃的修复之外的任何内容。
  • __2020 年 12 月 1 日__:停止接受任何 PR 🎉

更新(2019 年 8 月):有关将 TSLint 配置文件迁移到 ESLint 配置文件的 CLI 命令,请参见tslint-to-eslint-config


更新(2020 年 3 月):在 #4914 中的讨论之后,在 1 月 1 日的最后期限中添加了 _“并修复了因破坏 TypeScript 更改而引入的崩溃”_。

Documentation

最有用的评论

我会很高兴有一个 CLI 命令将 tslint.json 迁移到 eslint.json,映射等效的规则和选项。 理想情况下,它将删除可以从 tslint.json 迁移的规则,并保留尚无等效规则(或不支持使用的选项)的规则,以便该规则可以随着时间的推移反复幂等运行,直到 tslint.json 变为空在某些时候,我们可以完全依赖 ESLint。

所有52条评论

我会很高兴有一个 CLI 命令将 tslint.json 迁移到 eslint.json,映射等效的规则和选项。 理想情况下,它将删除可以从 tslint.json 迁移的规则,并保留尚无等效规则(或不支持使用的选项)的规则,以便该规则可以随着时间的推移反复幂等运行,直到 tslint.json 变为空在某些时候,我们可以完全依赖 ESLint。

好消息。
ESLint 家伙已经开始了 typescript-eslint项目来支持 TS。
他们也在寻求帮助。 这是声明。 .

迁移后编写 tslint 规则意味着什么?

有没有将 eslint 从 JS 迁移到 TS 的计划? 我讨厌这么说,但是如果 eslint 没有迁移到 ts,那么写规则就不会那么愉快了。

我的错,我们将使用的不是 eslint,我们将使用 typescript-eslint,这更有意义。 让我知道我是否可以提供任何帮助。

是否可以参考该计划以从 repo 中的 readme.md 中弃用? 似乎只有某些人知道这个计划,而不是常识。 谢谢!

@joeyj-msft 确实,由 a395501739bf7f0f166e5b0ccb355c0e9500445a 由 adidahiya 添加。

typescript-eslint中提供一些 TSLint 规则(https://palantir.github.io/tslint/rules/)的“回顾”会很好。 不知道它应该是 palantir 上的“ESLint”标志还是https://github.com/typescript-eslint/typescript-eslint 上的新列表。 但这将有助于确定项目是否准备好迁移。

@JoshuaKGoldberg我正在从 tslint 转移到 typescript-eslint。 我正在使用 TSLint 为我的项目创建自定义规则。 我如何才能像在 TSLint 中一样继续创建自定义规则?

我的项目创建 Javascript 和 Typescript 文件,所以我必须为它们创建一个规则?

@moulikcipherX感谢您的提问,好问题!

您可以使用 typescript -eslint/packages/eslint-plugin-tslint在 ESLint 中使用 TSLint 规则。 它包装了一个 TSLint 配置并使用 TSLint 对您的代码进行 lints。

要在 ESLint 中编写规则,请参阅typescript-eslint/packages/eslint-plugin 。 该 README.md 列出了所有受支持的规则_(列表变得非常大!)_。 ROADMAP.md将现有的 TSLint 规则映射到新的等效规则。

谢谢@JoshuaKGoldberg。

因此,我可以进一步使用与 TSLint 相同的方法为 TypeScript 创建自定义规则。

注意:我刚刚使用更具体的路线图时间表更新了此线程中的原始帖子。 滚动到此页面的顶部以查看它。

@SamB gh-pages 网站上的博客已经过时了,我们还没有更新它。 博客文章链接在自述文件的顶部。

@adidahiya @JoshuaKGoldberg
我想为 typescript-eslint 项目做出贡献,那么我应该从哪里开始呢?

将来是否支持从自定义 tslint 规则定义 eslint 规则的等效转换typescript-supported-eslint

我想说的是有一个特定的 CLI 命令来将 custom-tslint-rule 的 JS 文件转换为相应的 eslint 兼容的 linting 规则。 将 tslint 的规则重新实现为 eslint 将是一项非常艰巨的工作,这将有很大帮助...

感谢您创造了如此出色的工具,并祝您在未来的冒险中一切顺利。 说到冒险,这肯定是一个,不是吗?

无论如何,祝你一切顺利,
将要

鉴于我们即将到 2019 年底(据说该 repo 被弃用的那一年),现在可能是在 NPM 中添加 deprecated 标志的好时机,以便新安装针对 ESLint。

让自述文件通知更加明显(顶级)并将用户链接到 typescript-eslint 也会很有用。

既然 ESLint 已经涵盖了几乎所有常见用例,您是否打算这样做?

我也认为并希望当 tslint 被弃用时,eslint 会获得更大的压力,社区会更加关注它

tslint-to-eslint-config有助于将tslint.json转换为.eslinerc.js但它不能
不能照顾内联tslint:disable:<rule> ,还有一些规则没有配置好或者 eslint 还不支持。

从 tslint 迁移到 eslint 还是有一些优势,使用 eslint 处理 typescript 文件有什么好处? 为了在 typescript 社区和 javascript 社区之间获得更好的一致性?
如果一个项目只使用打字稿,根本没有javascript文件,那么迁移后还有什么好处吗?

tslint-to-eslint-config有助于将tslint.json转换为.eslinerc.js但它不能
不能照顾内联tslint:disable:<rule>

确实: https ://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
如果您愿意,欢迎您参与添加! 在https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246有一项正在进行的 PR 可以使用一些帮助。

从 tslint 迁移到 eslint 还是有一些优势,使用 eslint 处理 typescript 文件有什么好处?

您可以查看该主题顶部提到的博客文章中列出的原因。

@beenotung

与 ESLint 相比,TSLint 一直是有限的,有一大堆规则是它从未有过的,而 ESLint 没有。 更不用说 ESLint 一直拥有的插件和更大的社区/支持。 此外,我们中的许多人都有一个很好的配置eslintrc ,我们在任何地方都使用,这使得任何 TSLint 项目都成为需要修复的不一致(通过使用非过时的工具)。

如果 ESLint 中缺少 TSLint 所具有的任何内容,最好将其提高以便可以实施,而不是继续使用过时的工具。

感谢您为 eslint 提供更多上下文,我看到了使用 eslint 的好处。

我实际上试图从 tslint 迁移到 eslint,但似乎有些边缘无法轻易修复,因为 eslint 没有类型的概念(因此泛型类型的缩进被破坏)。

关于 eslint 的工具支持(尤其是配置文件上的 IDE 提示)。 我希望有一天我能做出贡献,但我目前没有经验也没有自由工作。 (至少它不在我列表的顶部,因为 tslint 仍然可以正常工作)

似乎不太痛苦的方法是将 tslint 用于 typescript 文件,将 eslint 用于 javascript 文件,这样两个世界都可以享受它们的“一致性”。

由于 npm 声明不推荐使用 TSLint 并改用 ESLint ,因此我假设迁移已完成。
这个问题不应该关闭吗?

@cdalexndr将这个问题开放给人们了解弃用的理由并阅读最新更新仍然很有用。

由于上面的博客文章没有关注有关typescript-eslint的技术细节。
TSLint 用户可以阅读更多关于typescript-eslint如何工作?

一般来说,整个typescript-eslint/README文件都具有透明过渡所需的一切。

软件包本身没有在 npm 上标记为已弃用是否有原因? 比如请求

@niklasR版本 6.0.0 在 NPM 中被标记为已弃用,然后一切都崩溃了。

查看 #4919 和 #4914 。

我们 _ 想要 _ 彻底摆脱困境 😛 ......人们应该停止使用 TSLint。

看起来我们只是从未明确地将新版本标记为已弃用; 请参阅https://www.npmjs.com/package/tslint上的版本历史记录:
Screenshot showing 6.0.0 as deprecated on npm but later versions not

我没有权限 - @adidahiya

哦,奇怪,我认为这里的文档建议此命令将弃用所有潜在的未来版本,这些版本属于该范围:

npm deprecate tslint@^6.0.0 "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information."

...但我想情况并非如此。 我已经继续并弃用了较新的。

@adidahiya谢谢,我在这里打开了一个关于 NPM 文档的问题: https ://github.com/npm/cli/issues/1165

是否也应弃用旧版本? 同样request是怎么做的呢

我问的原因是因为我们正在考虑将我们的包迁移到 ESLint,但是使用 TSLint ^5 相当多,使用我们现有的流程来扫描我们的 (300+) 存储库会很好弃用通知以标记任何需要迁移的内容。

弃用始终且仅适用于现有版本; 如果您希望弃用新版本,则始终必须在发布后手动弃用它们。

用户在 github 页面https://palantir.github.io/tslint/ 上显示关于 TSLint 弃用的非常清楚的内容不是很好吗?

这正是我一直在等待的! 请有人提供一些关于从 tslint 迁移到 eslint 的清晰分步说明

TSLint 文档网站已经有一段时间没有更新了,但是这个 repo 的 README 是最新的,并且在typescript-eslint README中有很多有用的信息,包括迁移的分步指南。

修复错误消息
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm 安装 chokidar
npm 缓存清理 --force
npm install -g @angular/ cli@latest

install error
您好 Angular 团队,我是 Angular 新手,请帮助我解决在尝试创建新项目时遇到的错误。

谢谢你。

您好 Angular 团队,我是 Angular 新手,请帮助我解决在尝试创建新项目时遇到的错误。

谢谢你。

你来错地方了
这是palantir而不是angular
请在https://github.com/angular/angular/issues创建一个问题
或者更好的是,查找是否已经存在解决此问题的问题
乐于助人,再见

尽管我对他们向“这里”寻求 Angular 帮助感到目瞪口呆。我对他们的标志看起来像英国电源插座印象深刻。

@JoshuaKGoldberg谢谢!

您归档/锁定此存储库的那一天也应该到来。

它不应该再次需要更改代码。 如果现在有人发现了一个 bug,解决方案是使用 ESLint,而不是挖掘这个长期过时的项目。

很高兴看到大多数人现在都试图摆脱它,但放弃它越明确越好。

我认为自 2020 年 9 月起不应再使用 ts-lint 代替 eslint

如果您的项目仍然使用 ts-lint,请考虑使用
检查https://github.com/typescript-eslint/tslint-to-eslint-config

但是 typescript-eslint 并不能真正说明问题所在https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

但是 typescript-eslint 并不能真正说明问题所在https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

我认为这或多或少对 TSLint 是正确的,为什么即使使用 TSLint,我们也在 linting 脚本中调用tsc --noEmit

我使用版本 8 生成了一个新的 Angular 应用程序,它附带了 tslint 默认值。 我已经开始使用 ts config 来实现 husky 了。 我的问题是,鉴于我将在未来几年在我的项目中使用 Angular 8,是否必须按照建议迁移到 typescript-eslint?

@mayankkalbhor如您所见,Angular 的默认设置仍然是使用 TSLint。 我相信要到 Angular 11 或更高版本才能为 ESLint 配置 Angular CLI 中的所有默认配置,请参阅路线图: https ://angular.io/guide/roadmap#migration -to-eslint。

如果你已经设置了一些东西,你将不得不自己迁移它,而没有什么真正迫使你使用 ESLint 而不是 TSLint。 这完全是你自己的选择。 如果您更喜欢 ESLint 中的功能或计划花时间真正配置您的规则,那么迁移可能是您的最佳选择。 但是,如果您没有花任何时间配置 TSLint 规则并且对它们感到满意,您可以无限期地继续使用它们。 只是不要指望无限量的错误修复和功能更新。

我相信 Angular 开发人员的默认路径是等待 Angular 在未来的 Angular 升级中包含迁移脚本,可能是从 Angular 10 到 11 或 11 到 12。

然而,任何人都可以自由地自行迁移到 ESLint。 迁移自己的唯一真正阻碍是,如果您有时间并且不介意丢失等效 ESLint 配置中当前不存在的功能。 以前通过Codelyzer进行了一些 linting 配置,现在我们在这里有一个即将替换的地方: angular-eslint

当我们到达软件的 EOL 时,如果每个规则文档都有一个指向 typescript-eslint 文档中替换规则的链接,那就太棒了,就像 typescript-eslint 反过来做的那样。

这是否意味着 2021 年 1 月 1 日之后我将无法在我的项目中使用 tslint? 目前我的构建正在使用 tslint。 我没有在 npm 网站上看到任何安装 tslint 的命令。 它说 tslint 现在已弃用。 有人可以解决我的疑问吗?

谢谢你。

您可以使用它,但您不会以任何方式获得任何形式的支持。
也没有更多的更新。
所以是的,你应该继续使用 eslint。

作为我最后一次检查,tslint 支持更多类型的自动修复,所以我建议在运行 eslint 之前运行 'tslint --fix'。

与此同时,情况可能发生了变化。

我会整理它的代码

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jacob-robertson picture jacob-robertson  ·  3评论

ghost picture ghost  ·  3评论

DanielKucal picture DanielKucal  ·  3评论

cateyes99 picture cateyes99  ·  3评论

avanderhoorn picture avanderhoorn  ·  3评论