刚刚,TypeScript 6.0 发布,但真正的重点其实是 7.0
刚刚,微软正式发布了 TypeScript 6.0。
这次更新看起来像一次常规版本升级,但官方给它的定位很特别:它是一个过渡版本。因为从 7.0 开始,TypeScript 编译器将基于 Go 重写版本 演进,6.0 的主要任务,就是帮助开发者更平滑地过渡到下一代 TypeScript。
换句话说,6.0 更像是一座桥,真正的大变化在 7.0。
6.0 为什么值得关注?
因为它是最后一个基于当前 JavaScript 代码库的版本。
微软正在用 Go 重写 TypeScript 编译器,目标很明确,就是进一步提升编译和类型检查性能。官方也提到,7.0 其实已经非常接近完成,如果你的项目能接受 6.0,未来也可以关注 7.0 的原生预览版。
所以,这次 6.0 与其说是在加功能,不如说是在提前铺路。
这次新增了哪些实用能力?
虽然 6.0 是过渡版本,但还是有几项值得关注的更新。
首先是类型推断更合理了。如果一个函数里根本没有使用 this,TypeScript 6.0 就不会再把它当成“上下文敏感函数”处理,这让泛型推断更准确,也修复了方法写法和箭头函数在推断上的不一致问题。
其次,支持 #/ 开头的子路径导入。这项能力是跟进 Node.js 新规范,在 nodenext 和 bundler 模块解析模式下可以使用,项目路径管理会更现代一些。
另外,--moduleResolution bundler 现在可以和 --module commonjs 搭配使用,这对很多还没完全切到 ESM 的项目来说,是一个更平滑的升级路径。
在语言和标准库层面,TypeScript 6.0 还新增了:
es2025作为新的target和lib- 内置
Temporal类型支持 Map的getOrInsert、getOrInsertComputed方法类型RegExp.escape类型支持dom.iterable和dom.asynciterable内容并入lib.dom.d.ts
这些更新不算炸裂,但都挺实用,属于能让现代 JavaScript 开发体验更顺手的那一类。
真正需要注意的,是这些为 7.0 做准备的变化
相比新特性,TypeScript 6.0 更重要的,其实是它开始系统性地调整默认行为。
比如未来默认值会越来越“现代化”:
strict默认开启module默认变成esnexttarget默认变成es2025
同时,两个特别容易影响项目配置的地方也变了:
第一,rootDir 不再自动推断,默认就是当前目录。
这意味着很多项目最好显式写上 rootDir,比如 ./src,否则升级后可能出现目录结构变化。
第二,types 默认变成空数组。
以后不会再自动把所有 @types 包放进来了,需要手动指定,比如 Node 项目通常就要加上:
"types": ["node"]
官方给出的理由是:这样不仅类型环境更清晰,还能明显提升构建性能,部分项目甚至能快 20% 到 50%。
一批老配置,真的该退休了
6.0 也提前给 7.0 的弃用方向定了调。
像这些老选项,后面都要逐步退出:
target: es5--moduleResolution node--moduleResolution classicamd、umd、systemjs--baseUrl--downlevelIteration--outFile
还有一些过去可以关闭的行为,未来也会直接默认开启,比如 esModuleInterop、严格模式等。
说得直接一点,TypeScript 团队已经不想再为大量历史包袱长期买单了。整个方向就是:默认更现代,配置更明确,性能更优先。
升级时要注意什么?
如果你准备升级到 6.0,最实际的建议就几条:
先把弃用警告压住,临时可以设置:
"ignoreDeprecations": "6.0"
然后尽快做两件事:
- 显式配置
types - 显式配置
rootDir
如果项目还在使用旧的模块解析方式,也建议尽快往 nodenext 或 bundler 迁移。
另外,官方也提供了 ts5to6 工具,可以辅助处理像 baseUrl、rootDir 这类升级问题。
写在最后
TypeScript 6.0 本身并不是主角,它更像是 7.0 到来之前的一次集体热身。
它一边补上现代 JavaScript 的新能力支持,一边开始清理过去积累的旧配置和兼容负担。而更大的变化,其实已经在路上——那就是基于 Go 重写的 TypeScript 7.0。
所以这次更新最值得关注的,不只是“多了什么功能”,而是它释放出的明确信号:
TypeScript 正在进入一个新阶段。