TypeScript 6.0 正式发布,为7.0做准备

更新日期: 2026-04-06 阅读: 4 标签: TypeScript

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 了。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13596

相关推荐

Nerv_一款类 React 前端框架,基于虚拟 DOM 技术的 JavaScript(TypeScript) 库

Nerv_是一款由京东凹凸实验室打造的类 React 前端框架,基于虚拟 DOM 技术的 JavaScript(TypeScript) 库。它基于React标准,提供了与 React 16 一致的使用方式与 API。

使用TypeScript两年后-值得吗?

差不多两年前,我在一个创业团队中开始了一个全新的项目。用到的全都是类似Microservices,docker,react,redux这些时髦的东西。我在前端技术方面积累了一些类似的经验

TypeScript最佳实践:是否使用noImplicitAny

我应该使用noImplicitAny TypeScript编译器标志吗?noImplicitAny编译器选项所做的,基本上是将TypeScript从可选类型语言转换为强制类型检验语言。这使得TypeScript离JavaScript的超集稍微远了一些,因为简单的:

为什么要学习Typescript 语言呢?Typescript 开发环境安装

TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。

5分钟了解TypeScript

有两种方式安装TypeScript,如何创建第一个TypeScript文件,在TypeScript中,可以使用interface来描述一个对象有firstName和lastName两个属性,TypeScript支持JavaScript的新功能,其中很重要的一个功能就是基于类的面向对象编程

Typescript中以变量方式传递类

最近尝试用TypeScript写一个工具库,需要实现这样一个场景:声明一个抽象类Parent,声明一组子类ChildA、ChildB继承这个Parent,实现它的抽象方法

TypeScript_TS系列之高级类型

交叉类型:将多个类型合并为一个类型、联合类型:表示取值可以为多种类型中的一种、混合类型:一个例子就是,一个对象可以同时做为函数和对象使用,并带有额外的属性、类型断言:可以用来手动指定一个值的类型

用TypeScript弥补Elm和JavaScript之间的差距

近些日子,我使用了新语言编程,从JavaScript,切确地说是Elm,转成TypeScript。在本文中,我将继续深挖一些我非常喜欢的TypeScript特性。

TypeScript_命名空间(namespace)

什么时候要用命名空间?如果你发现自己写的功能(函数/类/接口等...)越来越多, 你想对他们进行分组管理就可以用命名空间, 下面先用类,举例:发现namespace下还有export, export在这里用来表示哪些功能是可以外部访问的:

TypeScript功能:const断言

我发现官方的 TypeScript 文档非常有用,但是总觉得有点过于学术化并且枯燥无味。每当我发现一个新功能时,我想要知道这个功能究竟能够解决什么问题而不是长篇大论

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!