Node.js 22 和 23 版本 TypeScript 运行支持的变化

在最近的 Node.js 版本更新中,官方对 TypeScript(TS)文件的执行方式进行了重大调整,特别是 22 版本和 23 版本之间的差异较大。本文将详细解析这两个版本在 TypeScript 运行支持方面的变化。

一、Node.js 22 版本:实验性支持 TS 运行

在 Node.js 22 版本,默认情况下:

  • Node.js 无法直接运行 TypeScript 文件 (*.ts)。
  • 如果尝试 node myfile.ts,会报错,因为 Node.js 只能解析 JavaScript (*.js) 文件。
  • 但是,Node.js 22 引入了一个实验性特性 --experimental-transform-types,可以让 Node.js 直接运行 TypeScript 代码 ,但仅限于可擦除语法(erasable syntax)。

22 版本如何运行 TS 代码?

  1. 启用 TypeScript 运行支持:

    css 复制代码
    node --experimental-transform-types myfile.ts
    • 这个参数的作用是 允许 Node.js 直接运行 TypeScript 文件。
    • 但它仅支持 可擦除语法,即 TypeScript 的类型信息会在运行前被移除,不影响 JavaScript 逻辑。
  2. 禁用 TypeScript 类型擦除:

    css 复制代码
    node --experimental-transform-types --no-experimental-strip-types myfile.ts
    • --no-experimental-strip-types 选项会 禁用自动去除 TypeScript 类型信息。
    • 但这样做通常没有意义,因为原生 JavaScript 解析不了 TypeScript 类型,可能导致代码运行时报错。

总结 22 版本的关键点:

版本 默认支持 TS? --experimental-transform-types --no-experimental-strip-types
Node 22 ❌ 不支持 ✅ 需要手动开启 ❌ 仅决定是否移除 TS 类型,不影响是否能运行

二、Node.js 23.6.0 版本:默认支持 TypeScript

在 Node.js 23.6.0 版本之后,TypeScript 运行支持有了重要变化:

  1. 默认支持运行 *.ts 文件,不需要额外参数。
  2. --no-experimental-strip-types 被删除,因为 Node.js 现在默认会处理 TypeScript 的可擦除语法。
  3. 如果 TypeScript 代码包含不可擦除语法 (如 namespace),仍然需要 --experimental-transform-types 参数。

23 版本如何运行 TS 代码?

复制代码
node myfile.ts

直接运行 TypeScript 文件,无需额外参数!

但如果 TypeScript 代码包含不可擦除语法,则仍然需要 --experimental-transform-types:

css 复制代码
node --experimental-transform-types myfile.ts

总结 23 版本的关键点:

版本 默认支持 TS? --experimental-transform-types --no-experimental-strip-types
Node 23.6.0 ✅ 默认支持 ✅ 仅在包含不可擦除语法时需要 🚫 被删除,不再需要

三、Node.js 22 vs 23 版本的 TypeScript 运行支持对比

特性 Node.js 22 Node.js 23.6.0
默认支持 TypeScript 运行 ❌ 需要 --experimental-transform-types ✅ 直接支持
可擦除语法 ✅ 需要 --experimental-transform-types ✅ 默认支持
不可擦除语法 ❌ 默认不支持 ❌ 仍需 --experimental-transform-types
--experimental-transform-types ✅ 允许 TS 运行(但需要手动开启) ✅ 仅在需要时使用
--no-experimental-strip-types ✅ 存在,可控制是否擦除类型 🚫 被删除,不再需要

四、结论

  • 在 Node.js 22 版本 ,要运行 TypeScript 文件,必须手动添加 --experimental-transform-types。
  • Node.js 23.6.0 版本之后 ,默认可以运行 TypeScript,但如果代码包含不可擦除语法,仍然需要 --experimental-transform-types。
  • --no-experimental-strip-types 在 23.6.0 版本后被删除,因为 Node.js 现在默认会处理 TypeScript 的可擦除语法。

如果你在 Node.js 22 版本运行 TS 代码,需要手动启用 --experimental-transform-types,但在 23 版本之后,TypeScript 文件可以直接运行,体验更加流畅。

相关推荐
l1m0_20 分钟前
AI设计工具有哪些?Paico、Pixso AI、墨刀AI、Lovable、Codex怎么选
前端·人工智能·ai·设计·墨刀·codex·pixso
web打印社区22 分钟前
Lodop在Edge和双核浏览器-先分清内核
前端·javascript·edge·pdf·ecmascript·html5
西瓜拿铁好喝27 分钟前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
IT_陈寒27 分钟前
深入理解SpringBoot:核心原理与最佳实践
前端·人工智能·后端
风骏时光牛马1 小时前
大模型综合能力多维评测:性能、逻辑与落地表现对比
前端
liuchangng1 小时前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目
Dwzun1 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
小码哥_常7 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮9 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀11 小时前
Vue插槽
前端·javascript·vue.js