TypeScript 6 官宣,JS “最后之舞“,版本升级踩雷指南

今日要闻

打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。

TypeScript 团队官宣,TypeScript v6.0 主版本正式发布,这也是基于 JavaScript 实现的最后一个主版本。

TypeScript v7 开始,TypeScript 将正式移植到 Go 语言,利用原生代码和共享内存多线程提升性能。目前,我们已经可以通过 VS Code 扩展或 npm 手动安装,抢先体验 TypeScript-Go 原生预览版了。

TypeScript v6 是主版本更新,所以此版本会涵盖新功能支持和破坏性更新,主要用于当前版本和基于 Go 语言版本的过渡。换而言之,如果你的项目能顺利迁移到 v6,未来迁移到 v7 的阻力也会更小。

JS 新功能支持

TypeScript v6 新增了 3 个最新的 JS 新功能,所以当我们使用这些新功能时,现在也能获得良好的类型提示。

Map 新方法

来看一段简单的 Vite 源码:

ts 复制代码
// Vite 源码
if (!hmrClient.dataMap.has(ownerPath)) {
  hmrClient.dataMap.set(ownerPath, {});
}

hmrClient.hotModulesMap.get(ownerPath);

这是一种常见的 Map 模式,先判断某个键是否存在,如果有就取值,没有就设置并读取默认值。

针对这种无聊的使用场景,Map 数据结构新增了 2 个实例方法,用于快速判断和设置某个键的默认值:

  • map.getOrInsert()
  • map.getOrInsertComputed()

我们使用 Map 新方法重构一下 Vite 源码:

ts 复制代码
hmrClient.hotModulesMap.getOrInsert(ownerPath, {});

这基本上是一个更精简的"方法糖",一行代码消灭样板代码,更符合人体工程学。

Temporal API

日期和时间一直是 JS 开发中的痛点之一,过去我们经常借助 Moment.js 之类的工具库来改善开发体验。

新出的 Temporal API 被设计来取代 Date 对象,支持多种场景的日期和时间管理,无需安装依赖。

一个计算今天和明天的简单例子:

ts 复制代码
// 今天
let today = Temporal.Now.instant();
// 24 小时后的明天
let tomorrow = today.add({ hours: 24 });

console.log(`Today: ${today}`);
// Today: 2026-03-25T14:12:53.760909912Z
console.log(`Tomorrow: ${tomorrow}`);
// Tomorrow: 2026-03-26T14:12:53.760909912Z

此外,还有 RegExp.escape() 静态方法,用于保留字符串在构造正则时的字面量行为,这是 ES2025 的旧功能,示例就略过了。

这三大 JS 功能必知必会,最晚的功能今年也会正式发布,建议先学为敬!

项目更新

tsconfig.json 文件中,一些配置选项的默认值修改了。

编译选项现在默认启用严格的类型检查,不需要显式设置;"types": [] 默认为空数组,防止构建时无意包含多余的声明文件,你可以按需添加类型声明文件;如果你不介意自动加载所有声明文件,可以使用 "types": ["*"]

三种常见情况如下,任选其一:

json 复制代码
{
  // 保留旧版行为,全部自动包含
  "types": ["*"],

  // 默认值
  "types": [],

  // 也可以像 Vite 源码一样,
  // 按需添加声明文件
  "types": ["node"]
}

lib 库声明也有所改动,dom 库现在包含了 dom.iterabledom.asynciterable 两个声明文件,所以可以简化配置。

json 复制代码
{
  // v6 之前:
  "lib": ["dom", "dom.iterable", "dom.asynciterable"],
  // v6:
  "lib": ["dom"]
}

编译目标默认为当年的 ECMAScript 版本,比如现在是 ES2025,根据年份和最新标准自动更新。

默认的模块系统为 ESNext,也就是下一代的 ESM 模块,这不仅支持广为人知的 ES6 import 语句,还支持最新的导入属性等标准功能,弃用导入断言等过时语法;esModuleInterop 现在始终启用,让 ESM 和 CJS 的交互更安全。

ts 复制代码
// v6 之前:
import * as express from "express";
// 导入断言
import data from "./data.json" asserts { type: "json" };

// v6: esModuleInterop 启用
import express from "express";
// 导入属性
import data from "./data.json" with { type: "json" };

出于篇幅考虑,更完整的升级建议阅读官方文档最为妥当。

为了方便上手和学习,我把几个重要的默认配置总结到了这个配置中。

jsonc 复制代码
{
  "compilerOptions": {
    "strict": true,
    "target": "ES2025",
    "module": "ESNext",
    "esModuleInterop": true,
    "types": [],
    "rootDir": ".",
  },
}

这意味着,这些选项现在不需要我们自己配置也会启用了。可以看到,这些默认配置的改动基本上为了容易迁移到 TypeScript v7,拥抱现代化的前端工程。

其他更新

TypeScript v6 还新增了 Node 20 的新功能,支持 #/ 开头的子路径导入,要求配置 --moduleResolutionnodenextbundler

此外,TypeScript v6 的类型系统也有微妙的更新,比如没有 this 的方法不当做上下文敏感处理,引入--stableTypeOrdering Flag 对齐 TypeScript 7 的行为。

这些类型系统的技术细节比较复杂,本文不再一一展开,官方文档解释得很清楚,我读了三遍基本已经能看懂了。

破坏性更新

TypeScript v6 也弃用了一些过时的技术,或者不兼容 v7 的功能。

TypeScript v6 弃用了非主流的模块格式,包括 amd / umd / systemjs,因为后 ES6 时代的模块系统优先使用原生 ESM,偶尔使用 CJS。

同理,--moduleResolution 弃用 node / node10classic,Node 10 和经典的两种模块解析算法早已过时。

v6 还弃用了 ES5,最低输出版本要求至少是 ES2015,因为 IE 浏览器退役之后,现代浏览器基本都支持 ES6,ES5 市场份额几乎为零。

同理,--downlevelIteration 被弃用,因为这个配置主要用于将 ES6 的迭代器优雅降级到 ES5。ES5 和 IE 都无了,还要它做什么。

此外,v6 要求始终启用 --alwaysStrict true,因为 TypeScript v6 假设所有代码都开启 "use strict",因为现代 JS 开发基本会启用"阉割模式",阉割掉那些乱七八糟的 JS 怪癖。

特别鸣谢

总体而言,TypeScript v6 主要做了两方面的工作,一个是新增一些 JS 的新功能,同步最新的 JS 标准;二是提供一个过渡版本,让用户未来迁移到基于 Go 原生版本的阻力最小化,提前对齐 v7 的部分行为。

TypeScript v6 是一个主版本更新,包含新功能和破坏性更新,整体目的旨在简化配置,提前适应现代化的 JavaScript 开发环境,为迁移 v7 奠定基础。

以上就是今日"前端快讯"的全部内容了,感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

已经关注我的粉丝们,我们下期再见啦,掰掰~~

参考文献

TypeScript v6 官方博客:devblogs.microsoft.com/typescript/...

相关推荐
英俊潇洒美少年2 小时前
react useDeferredvalue和useTransition的讲解
前端·react.js·前端框架
爱学习的程序媛2 小时前
【WebRTC】呼叫中心前端技术选型:SIP.js vs JsSIP vs Verto
前端·javascript·typescript·音视频·webrtc·实时音视频·web
Amumu121382 小时前
Js: ES新特性(一)
开发语言·前端·javascript
scofield_gyb2 小时前
Redis 6.2.7安装配置
前端·数据库·redis
木斯佳2 小时前
前端八股文面经大全: 蓝色光标前端一面OC(2026-03-23)·面经深度解析
前端·面试·vue·校招·js·面经
2301_792580002 小时前
Pyrocko + PSGRN/PSCMP小问题
前端
Highcharts.js2 小时前
Highcharts for Python|用 Pythonic 的方式构建AI数据可视化图表
前端·人工智能·python·信息可视化·数据科学·highcharts·ai可视化
是罐装可乐2 小时前
SPA首屏接口过多导致卡顿?一套前端请求调度方案彻底解决
前端·性能优化·spa·前端架构·请求队列
子豪-中国机器人2 小时前
python AI自动化
java·前端·python