在最近的 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 代码?
-
启用 TypeScript 运行支持:
cssnode --experimental-transform-types myfile.ts
- 这个参数的作用是 允许 Node.js 直接运行 TypeScript 文件。
- 但它仅支持 可擦除语法,即 TypeScript 的类型信息会在运行前被移除,不影响 JavaScript 逻辑。
-
禁用 TypeScript 类型擦除:
cssnode --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 运行支持有了重要变化:
- 默认支持运行
*.ts
文件,不需要额外参数。 --no-experimental-strip-types
被删除,因为 Node.js 现在默认会处理 TypeScript 的可擦除语法。- 如果 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 文件可以直接运行,体验更加流畅。