Node.js 历史性一刻!原生 TS 支持正式 Stable,告别 ts-node

Node.js 的历史性一刻来了。

2025 年 12 月 10 日,Node.js 官方发布了 v24.12.0 (LTS) 版本。

在这个版本中,有一个不起眼但分量极重的更新:Type Stripping(类型剥离)功能被标记为稳定版(Stable)。

这意味着,你以后可能再也不需要安装 ts-nodetsx,也不需要配置繁琐的 babelwebpack,就能直接用 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 文件"的痛点。

它没想取代构建工具,但它想让你在开发阶段过得更舒服一点。

相关推荐
五月君_4 小时前
Node.js 企业级框架 Egg 4.0 发布:原生支持 AI 开发,架构全面革新
人工智能·架构·node.js
未知原色5 小时前
react实现虚拟键盘支持Ant design Input和普通input Dom元素-升级篇
前端·javascript·react.js·node.js·计算机外设
天天扭码16 小时前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
hxmmm20 小时前
自定义封装 vue多页项目新增项目脚手架
前端·javascript·node.js
濮水大叔20 小时前
VonaJS是如何做到文件级别精确HMR(热更新)的?
typescript·node.js·nestjs
小胖霞1 天前
全栈系列(15)github Actions自动化部署前端vue
前端·node.js·github
LYFlied1 天前
【一句话概述】Webpack、Vite、Rollup 核心区别
前端·webpack·node.js·rollup·vite·打包·一句话概述
程序员爱钓鱼1 天前
Node.js 编程实战:MongoDB 基础与 Mongoose 入门
后端·node.js·trae
程序员爱钓鱼1 天前
Node.js 编程实战:MySQL PostgreSQL数据库操作详解
后端·node.js·trae