TypeScript 6.0 正式发布,为7.0做准备
TypeScript 6.0 发布了。
如果你最近没看 TypeScript 团队的消息,可能不知道这版有个特殊的地方。6.0 很可能是最后一个基于现有 JavaScript 代码库的版本。TypeScript 团队正在用 Go 语言重写整个编译器,准备在 7.0 推出。
所以 6.0 的定位很清楚:一个过渡版本,帮开发者平滑升级到 7.0。但这不意味着 6.0 没什么内容。这次的破坏性更新挺多的,我们一个个来看。
默认值都改了
先说最影响日常开发的部分。tsconfig 里的默认值全换了。
strict 现在默认为 true。之前很多团队会手动开启 strict 来避免踩坑,现在新项目直接默认就是严格模式。如果你有老项目还没开 strict,升级后可能会收到一堆报错。
module 默认变成 esnext。ESM 终于成了默认选项,commonjs 不再是默认值了。
target 默认变成当年的 ES 版本。现在是 es2025,以后会跟着年份自动更新。这意味着大多数情况下你不用再手动指定 target 了。
types 默认变成空数组。这是个需要注意的地方。之前 TypeScript 会自动扫描 node_modules/@types 下的所有包,几百个类型定义全给你塞进去,编译速度会变慢。现在默认不加载任何 @types,需要什么自己明确写出来:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}TypeScript 官方说这一波改动能让编译速度提升 20% 到 50%。
新特性
Temporal API 终于有类型了
Date 和 DateTime 可以原生使用了:
const yesterday = Temporal.Now.instant().subtract({ hours: 24 });
const tomorrow = Temporal.Now.instant().add({ hours: 24 });这是个 Stage 4 的提案,TypeScript 6.0 直接内置了类型支持,不用再装 @types/temporal。
Map 新增 getOrInsert
const strict = compilerOptions.getOrInsert("strict", true);不用先判断 has 再 set 了,一步到位。
Subpath imports 支持 #/
{
"imports": {
"#/*": "./dist/*"
}
}之前必须写成 #root/ 这种带名字的格式,现在可以直接用 #/ 当前缀。这是 Node.js 20 新增的特性,TypeScript 跟进了。
--stableTypeOrdering
这是个新参数,专门给 6.0 升 7.0 用的。TypeScript 7.0 用 Go 重写后并行检查,类型顺序会变,可能导致声明文件差异很大。这个参数让 6.0 的行为和 7.0 对齐,方便比对。但官方说会导致类型检查慢最多 25%,不建议长期开着。
大量功能被废弃
6.0 到 7.0 之间有很多配置被废弃了:
target: es5 废弃,最低变成 es2015
--downlevelIteration 废弃
--moduleResolution node 废弃,改用 nodenext 或 bundler
module: amd/umd/systemjs/none 全部废弃
--baseUrl 废弃
--outFile 移除
module 关键字声明 namespace 废弃,改用 namespace 关键字
import ... assert 废弃,改用 import ... with
三斜杠指令 /// 废弃
如果你的项目还在用这些配置,6.0 会报废弃警告,7.0 会直接报错。
怎么升级
官方给了一个叫 ts5to6 的 codemod 工具,可以自动调整 baseUrl 和 rootDir。但大多数情况下你需要手动改 tsconfig。
我的建议是:
新项目直接上 6.0,用默认配置
老项目先别急着升,看看有没有用废弃的配置
用 --strict 跑一遍,看看有多少报错
types 里至少加上 ["node"],不然 process、fs 这种全局对象会报找不到
关于 TypeScript 7.0
官方说 7.0 已经“非常接近完成了”,预计今年晚些时候就能见到。用 Go 重写后编译速度据说能快 10 倍,对大型项目来说是好事。
就是以后调试编译器的时候,得从 JavaScript 换成 Go 了。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!