当前位置: 首页 > news >正文

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 文件一样:

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 文件"的痛点。

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

http://www.cnnetsun.cn/news/77800.html

相关文章:

  • Midscene.js跨语言调用终极指南:Python与Java SDK完整教程
  • Vue Signature Pad终极使用指南:5分钟上手电子签名组件
  • Linly-Talker结合OpenCV实现更自然的面部动作捕捉
  • 7、无线网络与复杂网络配置全解析
  • 企业数字化转型新引擎:yudao-cloud v2.4.2如何用IoT与工作流重塑业务流程
  • SM3算法PHP实战手册:构建国产加密应用的全流程指南
  • Element Plus Notification组件HTML渲染失效的深度诊断与修复指南
  • 3大集成方案:让iTerm2与VS Code成为你的开发黄金搭档
  • Unitree RL Gym 从零到实战:构建智能四足机器人的完整指南
  • Stressapptest:免费开源系统压力测试工具完整使用指南
  • 5个理由告诉你为什么PostgreSQL数据库设计应该选择可视化建模工具
  • React SoybeanAdmin:现代化中后台管理系统终极指南
  • Snipe-IT开源资产管理系统完整实战指南
  • AhabAssistantLimbusCompany终极指南:3步掌握游戏自动化,彻底解放双手
  • Flyby11终极指南:如何绕过Win11硬件限制轻松升级
  • OpCore Simplify终极指南:5分钟创建完美Hackintosh EFI配置
  • 百度网盘秒传工具深度评测:3大核心功能实战解析
  • SM3算法PHP实现完整指南:从入门到企业级应用
  • 突破Android布局瓶颈:FlexboxLayoutManager动态流式布局全解析
  • 永久在线CRM网站背后的AI力量:集成Linly-Talker实现智能客服数字人
  • Obsidian终极实战宝典:5步打造你的高效知识管理系统
  • 微信小游戏自动化工具终极指南:快速上手游戏助手完整教程
  • Langchain-Chatchat能否处理超大文件?
  • Virtio-win驱动深度解析:解锁KVM Windows虚拟机性能新高度
  • 3步搞定DataEase一键部署:开源数据可视化工具的极简安装指南
  • 5分钟搞定IFrame自适应!iframe-resizer终极使用指南
  • .NET智能视觉:从技术困境到业务破局的实战解码
  • LobeChat在Ensp下载官网场景下的智能客服应用
  • 16、Linux 系统字体与图像使用指南
  • 17、Linux 图像编辑全攻略