关于 Node.js 原生支持 TypeScript 的总结

原文地址: Node.js Now Supports TypeScript Natively: Everything You Need to Know

作者: Lizz Parody
欢迎关注我的公众号【 此方的手帐 】与你分享见闻与感想。

原本发表于 2025 年 3 月 18 日。因为工作关系对 Node.js 支持 TypeScript 比较关注,就顺手记录一下自己关注的部分。

本文并非原文的直接翻译,仅挑选出了个人关注的部分。感兴趣的朋友可以去原文查看完整内容。

Node.js 原生支持 TypeScript 的好处

使用 TypeScript 开发 Node.js 应用并非什么新鲜事,相关的工具链如 ts-nodets-jest 等早已完善。

唯一的问题是 TypeScript 开发出来的代码需要编译。所以原生支持的最大好处就是能简化开发流程,减少依赖项。比如单元测试对 mocha 的额外配置。

但实际体验可能还得打个问号。毕竟是实验性质功能,目前仅在 v23.6.0 版本可用。

奇数版本基本就告别了生产,下一个 LTS 版本(v24)最快也要等 5、6 月才有,短时间内不会有太多的生产案例出现。

支持,但又没那么支持

虽说是支持,但方式非常简单粗暴------直接将 TypeScript 的类型进行擦除。引用文中的例子:

TypeScript 复制代码
function describeColor(color: Color): string {
  return `Color named "${color.colorName}"`;
}

type Color = { colorName: string };
describeColor({ colorName: 'green' });

将类型擦除后会变为下面的形式。空出来的部分便是原来 TypeScript 的类型定义。

JavaScript 复制代码
function describeColor(color       )         {
  return `Color named "${color.colorName}"`;
}

describeColor({ colorName: 'green' });

如此简单粗暴的方式,针对上面简单的例子还能凑合,但显然没法应对更复杂情况。比如枚举类型、装饰器等。

文章也给出了暂时不支持的功能:

功能 是否支持 解决方案
枚举 使用常量枚举或联合类型 (type Status = 'success' 'error')
构造函数参数属性 在构造函数中显示声明类的属性
命名空间 使用 ES 模块 (export {})
JSX (.tsx) 使用 Babel 或 tsc
实验性 JS 特性 (装饰器、管道操作等) 等待 V8 原生支持

不支持装饰器、管道操作基本宣告了无法应用到生产环境中。

文件后缀

虽说能直接运行 TypeScript 代码,但其实对文件名还是有要求的,似乎还是有推销 ESM 的感觉。

.ts: 根据 package.json 的 "type" 字段,ESM 或 CommonJS。

.mts: 一直被当作 ESM。

.cts: 一直被当作 CommonJS。

.tsx: 目前不支持。

总结

由于是实验性质的功能,外加粗暴的支持方式,目前肯定是无法应用到生产项目上的,所以就当知道有这么一回事就行,相信 Node.js 的官方后续会添加更多的支持。

但是话说回来,既然需要直接跑 TypeScript 那为何不直接考虑天然支持的 Deno 呢?

感谢阅读到这里。

欢迎关注我的公众号【 此方的手帐 】与你分享见闻与感想。

相关推荐
郡杰3 分钟前
Boot:MP|测验|结果封装|异常处理|前后联调|拦截器
后端
团团崽_七分甜4 分钟前
后端基础概念 - 前端开发者指南(进程、线程、事务)
后端
退休倒计时25 分钟前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
倔强的石头_32 分钟前
从5万次到日均2000万次调用:大模型推理服务的性能工程实践V2.1
后端
环境栈笔记1 小时前
多账号浏览器选型检查清单:Profile、权限、Session 和任务日志怎么评估
前端·人工智能·后端·自动化
shepherd1111 小时前
一次把 Spring MVC 文件上传参数“查没了”的排查:multipart、Filter 与 request body 的连环坑
java·spring boot·后端
mONESY1 小时前
Node.js fs 文件系统模块 四种读写方案全解析
javascript·后端
Larcher1 小时前
从回调地狱到优雅异步:Node.js 文件操作进化史
javascript·后端·架构
Java编程爱好者1 小时前
深入浅出Agent: Harness最全调研与原理解析(持续更新中)
后端
日月云棠1 小时前
Spring 源码深度剖析:DispatcherServlet 的自动化注册机制
java·后端