Node.js 官方发布新工具,助力稳定 TypeScript 支持!

作者:前端充电宝

原文:mp.weixin.qq.com/s/t2iDkyKZc...

在现代前端工程体系中,TypeScript 已成为开发者提高代码可维护性、可读性和团队协作效率的重要利器。然而,长期以来,Node.js 对 TypeScript 的支持却远远跟不上,这种不对称的现状给广大开发者带来了诸多痛点。

6 月 10 日,Node.js 官方发布了 Amaro 1.0,这是 Node.js 官方的 TypeScript "类型剥除加载器",可以让开发者直接在 Node.js 中运行 .ts 文件,不需要先转成 .js

Node.js 对 TS 的支持问题

虽然 TypeScript 的使用越来越普遍,很多大项目已经默认使用,但在 Node.js 中直接运行 .ts 文件一直不容易:

  • 缺乏原生支持 :开发者不得不依赖如 ts-nodetsx 等工具进行运行时编译。
  • 启动慢、调试复杂:这些工具通常带有一定的启动成本,并增加了调试配置的复杂度。
  • 生态割裂:当 Node 核心本身不支持 TS 时,整个开发工具链难以形成统一的开发体验。

而与此同时,TypeScript 版本快速演进,语言能力不断增强,与 Node.js 的支持进度产生严重错位,成为社区长期关注的"短板"。

Node.js 开始支持 TS的过程

Node.js 团队逐步意识到原生支持 TypeScript 的必要性,从 2024 年起开始改进:

  • 2024 年 6 月(Node v22.6) :引入 --experimental-strip-types标志,首次实现对 TypeScript 类型注释的移除,可直接运行简单 TS 文件。
  • 2024 年 7 月(Node v22.7) :加入 --experimental-transform-types标志,开始支持如 enumnamespace 等需要代码转换的语法。
  • 2025 年 3 月(Node v23.6) :默认开启类型剥除,.ts 文件可以直接运行,不用加任何参数。

Amaro 1.0:打通 TS 支持最后一公里

6 月 10 日,Node.js 推出 Amaro 1.0,这意味着 TypeScript 的原生支持终于要稳定了!

Amaro 是用 Rust 写的,并通过 WebAssembly 在 Node.js 中运行的 类型剥除加载器。它的主要功能有:

  • 极速性能:基于 SWC 引擎,运行快速,占用资源小。
  • 有两种模式
    • strip-types:只移除类型,不转换语法(适用于常见场景)
    • transform-types:转换复杂语法,如枚举、命名空间等。
  • 支持依赖剥除 :可用于剥除 node_modules 中的 .ts 文件,适合 monorepo 项目。
  • 版本独立更新:Amaro 作为单独模块存在,可独立于 Node.js 升级。

类型剥离:在转译过程中从 TypeScript 代码中删除类型注释,使其能够直接在 JavaScript 环境中运行。

Node.js vs Bun vs Deno

在现代 JavaScript 运行时中,Bun 与 Deno 都提供了对 TypeScript 的原生支持,但它们与 Node.js + Amaro 的实现方式有 明显差异:

  • Node.js
    • 支持方式 :通过 Amaro 实现"类型剥离",只移除 .ts 文件中的类型注释,不执行完整 TypeScript 编译
    • 局限:仅支持 TS 的"语法超集"部分,不支持完整的 TS 类型检查或语义分析,需要搭配 IDE 或构建工具单独做类型检查。
  • Bun
    • 支持方式 :使用自己的 超快速 TS 编译器内置 TypeScript 支持 ,可以直接运行 .ts.tsx
    • 优势:无需配置直接支持 TS,支持 TS 语言大部分语法和类型语义,效果近似于 tsc。
  • Deno
    • 支持方式 :直接以 TypeScript 作为一等公民语言,从开始就支持 TS。内部使用 swc 做 TS 编译,提供强类型校验。
    • 优势.ts.tsx 无需配置可直接运行,支持类型检查与运行分离,灵活性好。

Node.js 选择"类型剥离"这种方式,是为了保留现有生态的兼容性,代价更小;Bun 和 Deno 是从底层支持 TS,功能更全。对于传统 Node 项目,Amaro 是更稳妥的方案。如果想要更先进的开发体验,Bun 和 Deno 可能更适合。

未来展望

Node.js 和 TypeScript 的整合已经迈出关键一步。Amaro 让"直接用 Node 跑 TS"变得可行。未来开发时,.js.ts 之间的区别会越来越小,开发方式会更加统一、高效,也更安全。

相关推荐
rgeshfgreh3 分钟前
Spring事务传播机制深度解析
java·前端·数据库
Hilaku41 分钟前
我用 Gemini 3 Pro 手搓了一个并发邮件群发神器(附源码)
前端·javascript·github
IT_陈寒41 分钟前
Java性能调优实战:5个被低估却提升30%效率的JVM参数
前端·人工智能·后端
快手技术42 分钟前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法
颜酱44 分钟前
前端算法必备:滑动窗口从入门到很熟练(最长/最短/计数三大类型)
前端·后端·算法
全栈前端老曹1 小时前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
HHHHHY1 小时前
mathjs简单实现一个数学计算公式及校验组件
前端·javascript·vue.js
boooooooom1 小时前
Vue3 provide/inject 跨层级通信:最佳实践与避坑指南
前端·vue.js
一颗烂土豆1 小时前
Vue 3 + Three.js 打造轻量级 3D 图表库 —— chart3
前端·vue.js·数据可视化
青莲8431 小时前
Android 动画机制完整详解
android·前端·面试