
Node.js 的历史性一刻来了。
2025 年 12 月 10 日,Node.js 官方发布了 v24.12.0 (LTS) 版本。
在这个版本中,有一个不起眼但分量极重的更新:Type Stripping(类型剥离)功能被标记为稳定版(Stable)。
这意味着,你以后可能再也不需要安装 ts-node 或 tsx,也不需要配置繁琐的 babel 或 webpack,就能直接用 Node.js 运行 TypeScript 代码了。
这是 Node.js 诞生以来,对 TypeScript 拥抱得最紧的一次。
什么是 "Type Stripping"?
简单来说,这就是 Node.js 对 TypeScript 的"原生支持"。
但在你欢呼之前,我们需要先搞清楚它的原理。Node.js 并没有内置一个完整的 TypeScript 编译器(TSC)。它不会去检查你的代码有没有类型错误。
它的做法非常"简单粗暴":在运行代码之前,迅速把你代码里的 TypeScript 类型标注(Type Annotations)全部"脱掉",把它变成纯净的 JavaScript,然后交给 V8 引擎执行。
这就好比你去坐安检。
-
以前(tsc / ts-node): 安检员会仔细检查你穿的这件"类型大衣"合不合身,扣子有没有扣对(类型检查),检查没问题了,再让你脱掉大衣进去。
-
现在(Native Type Stripping): 安检员根本不管你大衣合不合身,他只负责帮你把大衣脱掉,然后直接让你进去。
这种方式的最大的优点就是快。因为它跳过了最耗时的"类型检查"步骤。
怎么用?
在 Node.js v24.12.0 LTS 之前,你可能需要加各种 flag(比如 --experimental-strip-types)。
但现在,它Stable了。
你只需要像运行普通 JS 文件一样:
go
node app.ts
没错,就是这么简单。
只要你的 .ts 文件里只包含了符合规范的 TypeScript 语法(不用构建工具就能抹除的语法),它就能直接跑起来。
有什么限制?
"原生支持"听起来很美,但它不是万能的。为了保证性能和兼容性,Node.js 的这个功能有几个硬性限制,你必须知道:
1. 它不负责查错 再次强调,Node.js 只负责运行,不负责体检 。如果你把 string 赋值给了 number,Node.js 运行时可能不会报错(除非逻辑本身有错),直到代码跑偏。 所以,你依然需要在编辑器里(VS Code)或者 CI/CD 流程中运行 tsc --noEmit 来做类型检查。
2. 只能用"可擦除"的语法Node.js 只能处理那些"删掉也不影响逻辑"的 TS 语法。
-
✅ 支持: Interface(接口)、Type Alias(类型别名)、Generics(泛型)、函数参数类型标注。
-
❌ 不支持: Enum(枚举)、Namespace(命名空间)、Decorator(装饰器,除非是新的标准装饰器)。
因为像 Enum 这样的语法,编译后会生成额外的 JavaScript 代码(不仅仅是删掉那么简单),Node.js 的轻量级剥离器处理不了。
3. 显式扩展名 在 import 文件时,你必须写全扩展名,比如 import { sum } from './math.ts'。这和我们习惯的省略 .ts 后缀不太一样。
对我们意味着什么?
虽然有种种限制,但这依然是一个巨大的进步。
对于脚本编写、小型工具开发、或者本地快速调试来说,体验提升是飞跃级的。
-
以前: 写个小脚本,得先
npm init,装typescript,装ts-node,写tsconfig.json... 还没开始写代码,半小时过去了。 -
现在: 创建
script.ts,写代码,node script.ts。完事。
这也释放了一个强烈的信号:TypeScript 已经是事实上的标准了。
连 Node.js 这样庞大的运行时都在向它妥协、为它优化。未来的 JavaScript 生态,原生支持 TypeScript(哪怕只是剥离类型)将成为标配。
总结
Node.js v24.12.0 LTS 的这次更新,虽然没有完全替代 tsc,但它精准地解决了开发者"想直接运行 TS 文件"的痛点。
它没想取代构建工具,但它想让你在开发阶段过得更舒服一点。