最近发布的typescript 6.0有什么新能力

14 阅读3分钟

TypeScript 6.0 目前处于 Beta 阶段(发布于 2026 年 2 月),是一个非常特殊的版本。

简单来说,TypeScript 6.0 是一个“承上启下”的过渡版本。它的核心任务不是引入大量复杂的类型体操新语法,而是清理历史包袱,统一现代化的默认配置,并为即将到来的 TypeScript 7.0(基于 Go 语言重写的原生编译器) 铺平道路。

以下是 TypeScript 6.0 的核心新能力和关键变化:

1. 核心目标:为“原生时代”做准备

TS 6.0 是最后一个基于 JavaScript 编写的主版本。它的许多改动是为了让代码库能平滑迁移到未来的 Go 版本编译器(代号 Project Corsa)。

  • 原生编译器预览 (tsgo) :虽然 6.0 本身还是 JS 写的,但你可以通过 @typescript/native-preview 安装原生编译器预览版。

    • 能力:提供 tsgo 命令行工具。
    • 优势:编译速度提升 10 倍 以上(得益于 Go 语言和共享内存并行处理)。
    • 现状:目前主要用于类型检查,功能还不完全(如不支持 --build 模式),但 6.0 的发布标志着它已进入大众测试阶段。

2. 新增的 ECMAScript (ES2025) 能力支持

TypeScript 6.0 跟进最新的 ECMAScript 标准,直接内置了对以下新特性的类型支持:

  • Temporal API 支持:内置了对 Temporal(现代化的日期时间 API,用于替代旧的 Date)的类型定义。

  • RegExp.escape:支持 RegExp.escape() 方法,用于安全地转义正则表达式中的特殊字符。

  • Map/WeakMap Upsert 方法:支持 getOrInsertgetOrInsertComputed。这简化了“检查键是否存在,不存在则插入”的常见样板代码。

    TypeScript

    // 以前的写法
    if (!map.has(key)) {
      map.set(key, newValue);
    }
    const val = map.get(key);
    
    // 6.0+ 新能力
    const val = map.getOrInsert(key, newValue); 
    

3. “现代化默认值” (Modern by Default)

这是 6.0 最具感知度的变化。如果你创建新项目,不再需要手动配置一堆 strict 选项,编译器默认就是严格且现代的:

  • strict: true 默认开启:不再需要手动设置,强制类型安全。
  • module: esnext 默认开启:默认假定你在使用 ES Modules,不再默认为 CommonJS。
  • target: es2025 默认开启:编译目标默认为最新的 ES 版本,不再为了兼容 IE 而生成冗余代码。
  • types: [] 默认开启:默认不自动加载 node_modules/@types 下的所有包。这能显著提升构建性能(避免加载无关的类型定义),你需要显式在 tsconfig.json 中列出需要的 types(如 ["node", "jest"])。

4. 更好的工程化体验

  • 支持 #/ 路径别名:支持 Node.js 的 Subpath Imports 特性。允许在 package.json 中定义 imports 字段,并在 TS 中直接使用 #/internal/module 这种形式的导入,无需复杂的 path mapping 配置。
  • 智能的上下文类型推断:如果一个函数从未被实际调用或使用,TS 6.0 会更智能地处理其上下文敏感性,减少不必要的类型检查开销。
  • --noUncheckedSideEffectImports 默认开启:帮助捕获那些只为了副作用导入(如 import "./styles.css")但路径写错的情况。

5. 破坏性更新与废弃(大扫除)

为了配合 TS 7.0 的原生架构,6.0 移除了大量过时的配置项:

  • 废弃 target: es5:不再支持生成 ES5 代码(最低支持 ES2015/ES6)。
  • 废弃 moduleResolution: node:这是旧版的解析策略(也叫 node10),现在应使用 bundlernodenext
  • 废弃 baseUrl:不再推荐作为模块解析的根路径,建议使用标准的路径别名或子路径导入。

总结

TypeScript 6.0 是该语言“成年”的标志。 它不再试图兼容 10 年前的旧习惯,而是强制推行现代的最佳实践(ESM、Strict Mode、No ES5)。

你能做的下一步:

如果你正在维护旧项目,你会收到大量关于配置项废弃的警告。建议现在开始检查你的 tsconfig.json,特别是将 moduleResolution 迁移到 bundlernodenext,以适应 6.0 及未来的 7.0 版本。