TypeScript 6.0 Beta版发布:连接现在与未来的编程桥梁


TypeScript 6.0 Beta版发布,作为连接现有JavaScript代码库与未来TypeScript 7.0的桥梁,带来了多项革新,包括更智能的类型推断、全新的子路径导入功能、增强的模块解析选项等,为开发者提供更加流畅高效的编程环境。  

TypeScript 6.0的beta版正式与大家见面了!想象一下,这就像是一场即将开启的冒险之旅。你只需要简单运行下面这条命令,就可以开始你的探索之旅:


npm install -D typescript@beta

这次的更新不仅仅是一个小升级,而是为未来打下基础的重要一步。

为什么这么说呢?

因为TypeScript团队正在开发基于Go语言的新编译器和语言服务代码库,这将为TypeScript 7.0及以后版本奠定基石。

也就是说,TypeScript 6.0就像是连接现在与未来的桥梁,它的大部分改进都是为了帮助我们更好地迎接TypeScript 7.0的到来。

Daniel Rosenwasser,TypeScript的产品经理,他不仅热爱编程语言、编译器以及优秀的开发者工具,还致力于让我们的编程生活变得更加轻松有趣。正是在他的带领下,TypeScript团队为我们带来了这一次次令人兴奋不已的更新。

接下来,就让我们一起深入了解一下TypeScript 6.0都带来了哪些令人惊叹的新功能吧!

减少对this-less函数上下文敏感度的需求

当你在使用TypeScript时,有没有遇到过这样的情况:当你没有给参数明确指定类型时,TypeScript通常能够根据预期类型或者同一个函数调用中的其他参数来推断出类型。但是,当这些函数使用方法语法而不是箭头函数语法编写时,可能会出现一些意外的错误。这是因为TypeScript在尝试寻找泛型T的候选者时,会首先跳过那些参数没有明确类型的函数。这种现象被称为上下文敏感函数,简而言之,就是那些参数没有明确类型的函数。

为了让这个问题得到解决,TypeScript 6.0做了个聪明的选择:如果一个函数内部从未使用过this关键字,那么它就不会被视为上下文敏感函数。这样一来,所有上述例子都能正常工作了。这简直就像是给那些默默无闻的小英雄们颁发了一枚勋章,让他们也能成为舞台上的主角。

开启新时代的子路径导入功能

Node.js加入模块支持的同时,也引入了一个叫做“子路径导入”的特性。通过这个特性,包可以创建自己包内模块的内部别名。以前,如果你想从根目录导入某个模块,可能需要写成相对路径的形式,比如../../index.js。但现在,有了#开头的子路径导入,这一切变得如此简单直接。例如:

json
{
    "name": "my-package",
    "type": "module",
    "imports": {
        "#": "./dist/index.js",
        "#/*": "./dist/*"
    }
}

这意味着你可以这样写:

javascript
import * as utils from "#/utils.js";

比起之前复杂的相对路径,是不是感觉清爽多了?这一改动无疑大大提升了编码体验,减少了不必要的麻烦。

更加灵活的模块解析选项

过去,TypeScript的--moduleResolution bundler设置只能与--module esnext或--module preserve一起使用。然而,随着--moduleResolution node(也就是--moduleResolution node10)的弃用,新的组合方式成为了许多项目的最佳升级路径。具体来说,项目往往希望迁移到以下两种配置之一:

- --module preserve 和 --moduleResolution bundler
- --module nodenext

这取决于你的项目类型(例如打包后的web应用、Bun应用或Node.js应用)。总之,这次的调整使得模块解析更加灵活,适应性更强。

稳定类型排序带来的福音

TypeScript 6.0新增了一个名为--stableTypeOrdering的标志,旨在帮助6.0到7.0之间的迁移过程。由于并行检查机制的引入,在不同的检查器访问节点、类型和符号时,它们可能会按照不同的顺序进行,这就导致了内部ID分配的不确定性,进而影响输出的一致性。而--stableTypeOrdering标志则确保了无论何时何地,相同的文件都会产生一致的声明文件,这对于想要比较不同版本之间差异的人来说简直是救命稻草。

新增es2025目标和支持Temporal API

TypeScript 6.0增加了对es2025目标的支持,虽然ES2025并没有新增任何JavaScript语言特性,但它确实添加了一些内置API的新类型,并将某些声明从esnext转移到了es2025中。此外,备受期待的Temporal提案已经达到了第三阶段,并预计很快会被添加到JavaScript中。现在,你可以利用TypeScript 6.0提前体验这些新功能了。

其他重要更新

除了上述亮点外,TypeScript 6.0还带来了诸如Map和WeakMap的getOrInsert方法、RegExp.escape函数等实用功能。同时,dom库现在包含了dom.iterable和dom.asynciterable的内容,简化了对DOM集合进行迭代的操作。

面向未来的准备

TypeScript 6.0不仅是当前版本的一个重大更新,更是为即将到来的TypeScript 7.0铺平道路的关键一步。

面对即将到来的变化,建议尽早调整你的项目以适应新版本的要求。