关于 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-node、ts-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 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路3 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x4 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn5 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈6 小时前
AI 读你的提示词,其实很没耐心
后端
用户8356290780517 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我123457 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒7 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记7 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk598787 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端