发布于 2026-01-06 0 阅读
0

隆重推出 @ts-migrating:升级 TSConfig 的最佳方式!DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

隆重推出 @ts-migrating:升级 TSConfig 的最佳方式

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

🚀 TypeScript 发展迅速,你的代码tsconfig库也应该跟上。但是,升级 TypeScript 设置(例如strict`type`、noUncheckedIndexedAccess`type` 或 `type`)erasableSyntaxOnly通常意味着要处理代码库中数百个类型错误。

这就是我开发的原因@ts-migrating,这是一个插件和 CLI 工具,可以帮助您逐步升级,tsconfig.json而不会破坏您的代码库或团队的开发速度。

😩 升级之痛tsconfig

启用更严格的编译器选项后,你会立即看到大量新的类型错误。这令人应接不暇。实际上,你的团队没有时间一次性修复所有错误,试图这样做只会导致团队精疲力竭和性能倒退。

那么人们会怎么做呢?

他们要么:

  • 无限期推迟升级
  • 可用作@ts-ignore@ts-expect-error作为毛毯补丁

但这两种方法都有缺陷。要么你永远不改进代码库,要么你掩盖问题,有时甚至会隐藏不相关的错误。

🧠 更好的方法:@ts-migrating

@ts-migrating它允许您立即启用所需的编译器选项,同时允许出现问题的代码行回退到旧配置。这是对 TypeScript 迁移的全新诠释:

  • 显示新配置引入的类型错误
  • 仅修补尚未准备好的行// @ts-migrating
  • 逐步修复这些线路,并随着时间的推移移除备用方案。

此插件旨在实现增量式且安全的迁移。事实上,它之所以被称为“增量式” @ts-migrating,正是因为强调的是持续的过程,而非一次性的迁移。

@ts-ignore与会屏蔽行上所有错误并可能掩盖无关问题的指令不同,该指令@ts-migrating仅针对由新指令引入的错误compilerOptions。这使得指令的意图清晰明确,并保证了行类型的其余部分安全无虞。

🔌 工作原理

安装方法很简单,只需运行:

npm install -D ts-migrating
Enter fullscreen mode Exit fullscreen mode

该工具由两部分组成:

1. 语言服务插件

将此添加到您tsconfig.json的 IDE 中,它将:

  • 显示升级选项引入的新错误
  • 允许您静音特定行// @ts-migrating
{
  "compilerOptions": {
    "plugins": [
      {
        "name": "ts-migrating",
        "compilerOptions": {
          "noUncheckedIndexedAccess": true
        }
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

tsc此插件仅影响集成开发环境 (IDE) 和开发环境,对生产环境构建没有影响。

2. 命令行工具

独立命令行界面有 2 个主要命令。

使用插件进行类型检查

由于 ts 插件对 无效tsc,您可以改为在终端/CI 中使用以下命令。

npx ts-migrating check
Enter fullscreen mode Exit fullscreen mode

tsc功能与插件一起运行,并报告新配置引入的所有错误。

标注你的错误

npx ts-migrating annotate
Enter fullscreen mode Exit fullscreen mode

这将// @ts-migrating在每个新错误行上方插入代码。请谨慎操作。请在干净的 Git 环境下运行此操作并检查更改。

🧪 真实案例:noUncheckedIndexedAccess

这是一个简单的函数:

function first(xs: number[]): number {
  return xs[0]; // error when `noUncheckedIndexedAccess: true`
}
Enter fullscreen mode Exit fullscreen mode

有了@ts-migrating,我们可以暂时允许这条线路回退:

function first(xs: number[]): number {
  // @ts-migrating
  return xs[0]; // error disappear as this line now fall back to `noUncheckedIndexedAccess: false`
}
Enter fullscreen mode Exit fullscreen mode

✅ 为什么你应该使用它

  • 避免大爆炸式迁移
  • 防止新的违规行为悄然发生
  • 让你的团队逐步升级
  • 对建造时间无影响
  • 清晰、有目的的代码注释

🌟 准备好迁移了吗?

ts-migrating帮助您实现 TypeScript 配置现代化,而不会让您的代码库变成一片混乱。

您可以在这里找到该项目:
👉 github.com/ycmjason/ts-migrating

如果你喜欢这个想法,请给仓库点个星标,在你的项目中尝试一下,然后告诉我结果如何。

如果您想支持这项工作,请考虑成为GitHub 赞助者。您的每一份支持都至关重要。

让我们tsconfig再次简化升级流程。

文章来源:https://dev.to/ycmjason/introducing-ts-migration-the-best-way-to-upgrade-your-tsconfig-2jmn