最近,TypeScript 的高级项目经理 Daniel Rosenwasser宣布 TypeScript 5.4 beta 版本发布。TypeScript 5.4 改善了类型推断,新增了NoInfer
工具类型,并且包含一些破坏性的变更。
TypeScript 5.4 beta 版本改进了某些类型的类型推断,使它们能够在闭包中缩小范围。
在上面的代码中,map
箭头函数闭包中的url
变量必须是 URL 类型。以前版本的 TypeScript 会将url
的类型推断为string | URL
,就像getUrls
函数的签名一样。新发布的 beta 版本能够正确理解箭头函数总是会在 URL 对象最后赋值给url
之后创建,因此会将url
的类型推断为URL
。有些开发人员在 Twitter 上对改进的类型推断表示了欢迎。
如果这些类型范围缩小的变化像看上去这么好的话,那将是一个巨大的改进,这会节省大量不必要的 if 语句、
!
操作符等。(来源)
闭包中的类型范围缩小很有用,谢谢开发人员。(来源)关于该特性的更多详情,开发人员可以参考发布说明(Preserved Narrowing in Closures Following Last Assignments)。
TypeScript 5.4 还为 JavaScript新的Object.groupBy
和Map.groupBy
静态方法添加了声明。发布说明中警告说:
注意,只有将
target
配置为esnext
或调整lib
设置后才能访问这些方法。我们希望这些方法最终能够在稳定的es2024
目标中使用。除此之外,TypeScript 还为开发人员提供了新的NoInfer
工具类型,让他们能够选择不使用 TypeScript 的类型推断。NoInfer
允许开发人员阻止有效却不需要使用的类型。在处理泛型类型参数时,该特性尤其有用。
在前面的样例代码中,TypeScript 5.4 将C
指定为可选参数defaultColor
的类型,但是,这里没有进一步进行推理,所以最终会将C
类型解析为"red" | "yellow" | "green"
。以前版本的 TypeScript(没有NoInfer
工具类型时)会将C
类型推断为"red" | "yellow" | "green" | "blue"
。
开发人员可以在微软的开发人员博客上查看完整的发布说明,包括新改进的准确性所带来的破坏性变更。该发布说明还包括更多技术细节、样例和该版本特性的完整列表。
开发人员可以按照如下方式安装已发布的 beta 版:
npm install -D typescript@beta
原文链接:
Typescript 5.4 Beta Released with Noinfer Utility Type and Improved Type Inference
评论