TypeScript 6.0 新特性
TypeScript 6.0 并非一个典型的功能版本。如果你期待升级后会有新的语法或显著的类型系统变化,那你可能会感到意外。这个版本主要关注现代化默认配置、移除历史遗留包袱,以及为 TypeScript 7.0 做好生态系统准备——即将推出的使用 Go 语言原生实现的编译器和工具链。理解这些变化及其原因,将为你在升级后节省数小时的调试时间。
核心要点
- TypeScript 6.0 是一个过渡版本——基于 JavaScript 构建的编译器的最后一个版本——旨在清理默认配置和废弃项,为即将到来的原生 TypeScript 7.0 系列做准备。
- 多个编译器默认配置已更改,包括
strict: true、module: "esnext"、动态target(当前解析为es2025)、types: []以及noUncheckedSideEffectImports: true。如果你的 tsconfig 依赖隐式行为,这些变化可能导致构建错误。 - 新的平台特性包括
es2025目标、Temporal API 类型、RegExp.escape、Map.getOrInsert以及合并的 DOM 库条目。 - 多个历史遗留选项如
--moduleResolution node(旧的node10行为)、--target es5以及较旧的模块格式已被废弃,为 TypeScript 7.0 过渡做准备。现在就处理这些问题,以避免日后痛苦的迁移。
TypeScript 6.0 是过渡版本,而非功能发布
TypeScript 6.0 被有意定位为基于 JavaScript 代码库构建的最后一个版本。TypeScript 7.0 预计将是基于 Go 的原生后继版本,具有更快的构建速度和编辑器性能。TypeScript 6.0 在这一过渡发生之前清理了基础设施。
实际影响:TypeScript 6.0 的大部分变化都是关于配置默认值和废弃项,而非新的语言特性。如果你的项目一直在积累历史遗留的 tsconfig 选项,现在是处理它们的时候了。
TypeScript 6.0 新特性:平台对齐功能
尽管重点在于过渡,TypeScript 6.0 确实为现代 JavaScript API 添加了有意义的支持。
ES2025 目标和新的内置类型
TypeScript 6.0 将 es2025 添加为有效的 --target 和 --lib 值。这包括对 RegExp.escape 等 API 的内置类型,同时也将一些声明从 esnext 移至 es2025。
它还为仍通过 esnext 暴露的较新 API 添加了内置类型:
RegExp.escape— 安全地转义字符串中的特殊正则表达式字符TemporalAPI —Date的现代替代品,在esnext或temporal.esnext下进行类型定义Map.getOrInsert和Map.getOrInsertComputed— 为Map和WeakMap提供更简洁的更新插入模式,通过esnext可用
// 之前:冗长的 Map 更新插入模式
if (!map.has("key")) map.set("key", defaultValue)
const value = map.get("key")
// 之后:简洁明了
const value = map.getOrInsert("key", defaultValue)
DOM 类型合并
dom.iterable 和 dom.asynciterable 现已合并到基础 dom 库中。你不再需要在 tsconfig.json 中单独列出它们。如果你之前使用 "lib": ["dom", "dom.iterable"],现在可以简化为只需 "lib": ["dom"]。
以 #/ 开头的子路径导入
TypeScript 现在支持使用 #/ 前缀的 Node.js 子路径导入。这可以清晰地映射到 package.json 中的 imports 字段,并使该功能更接近打包工具用户已经熟悉的别名模式。
Discover how at OpenReplay.com.
TypeScript 6.0 破坏性变更:哪些会真正影响你的项目
这是 TypeScript 6.0 迁移工作的主要部分。多个编译器默认配置已更改。
| 配置项 | TypeScript 6.0 默认值 |
|---|---|
strict | true |
module | esnext |
target | 当前支持的 ES 版本(目前为 es2025) |
types | [](空数组) |
rootDir | tsconfig 所在目录 |
noUncheckedSideEffectImports | true |
types: [] 的变化是影响最大的之一。以前,TypeScript 会自动包含 node_modules/@types 中的每个包。现在默认不包含任何内容。依赖 @types/node、@types/jest 或类似包中全局变量的项目会看到如下错误:
Cannot find name 'process'. Try adding 'node' to the types field in your tsconfig.
显式修复:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}
rootDir 的变化也很常见。如果你的输出文件突然出现在 dist/src/index.js 而不是 dist/index.js,请在 tsconfig 中添加 "rootDir": "./src"。
另一个值得关注的变化是 noUncheckedSideEffectImports: true。如果你的代码库中存在仅副作用的导入,且存在拼写错误或解析不稳定,TypeScript 6.0 更可能标记它们。
TypeScript 6.0 废弃项:TypeScript 7 之前需要移除的内容
这些选项在 6.0 中已废弃,为 TypeScript 7.0 过渡做准备,部分旧行为已经移除:
--target es5(现在支持的最低目标是 ES2015)--moduleResolution node/--moduleResolution classic→ 迁移到nodenext或bundler--module amd、umd、systemjs、none--baseUrl→ 将前缀直接移入paths条目--outFile→ 使用打包工具如 esbuild、Vite 或 RollupesModuleInterop: false和allowSyntheticDefaultImports: false- 旧版
module Foo {}命名空间语法 → 使用namespace Foo {} - 导入
assert语法 → 替换为with
你可以在 tsconfig 中使用 "ignoreDeprecations": "6.0" 暂时消除废弃警告,但这应被视为短期权宜之计。
升级到 TypeScript 6.0
使用以下命令安装当前的 6.0 候选版本:
npm install -D typescript@rc
运行 tsc --noEmit 并逐一处理错误。大多数问题将源于 types 数组、rootDir、副作用导入和废弃选项。
总结
TypeScript 6.0 是一个清理版本,而非功能展示。其目的是淘汰历史遗留默认配置,使编译器与现代 JavaScript 对齐,并为原生 TypeScript 7.0 系列奠定基础。越早处理这些迁移变更——更新 types 数组、显式 rootDir 值、副作用导入问题以及废弃选项替换——你通往 TypeScript 7.0 的道路就会越顺畅。
如果你想要 TypeScript 团队的完整技术分解,还可以阅读官方的 TypeScript 6.0 RC 公告。
常见问题
如果你的 tsconfig 依赖隐式默认值,很可能会出问题。最常见的问题来自 types 字段现在默认为空数组、rootDir 现在指向 tsconfig 目录,以及对副作用导入的更严格处理。升级后运行 tsc --noEmit 以在进行更改之前暴露所有错误。
TypeScript 6.0 是基于原始 JavaScript 编译器构建的最终版本。它专注于清理默认配置和废弃历史遗留选项。TypeScript 7.0 预计将是基于 Go 的原生后继版本,具有更快的构建速度和编辑器工具。6.0 版本是为该过渡做的准备步骤。
是的。TypeScript 6.0 中的旧 node 解析模式指的是旧版 node10 风格的行为,已被废弃,classic 也已移除。如果你的项目直接在 Node.js 中运行,使用 nodenext;如果你依赖 Vite、Webpack、Bun 或 esbuild 等工具来解析和打包模块,使用 bundler。
可以,但如果 esnext 不是你想要的,通常需要显式设置 module 选项。如果你的项目仍然输出 CommonJS,在 tsconfig 中将 module 指定为 commonjs。但是,在可能的情况下考虑迁移到现代模块设置,因为 TypeScript 6.0 明显倾向于当前的 ESM 优先工作流程。
Complete picture for complete understanding
Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Check our GitHub repo and join the thousands of developers in our community.