开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

Typescript 5.4 Beta 发布,提供 Noinfer 工具类型并改善类型推断

  • 2024-03-12
    北京
  • 本文字数:1192 字

    阅读完需:约 4 分钟

大小:426.77K时长:02:25
Typescript 5.4 Beta发布,提供Noinfer工具类型并改善类型推断

最近,TypeScript 的高级项目经理 Daniel Rosenwasser宣布 TypeScript 5.4 beta 版本发布。TypeScript 5.4 改善了类型推断,新增了NoInfer工具类型,并且包含一些破坏性的变更。


TypeScript 5.4 beta 版本改进了某些类型的类型推断,使它们能够在闭包中缩小范围。


function getUrls(url: string | URL, names: string[]) {  if (typeof url === "string") {    url = new URL(url);  }
return names.map(name => { url.searchParams.set("name", name) // ~~~~~~~~~~~~ // error! // Property 'searchParams' does not exist on type 'string | URL'.
return url.toString(); });}
复制代码


在上面的代码中,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.groupByMap.groupBy静态方法添加了声明。发布说明中警告说:


注意,只有将target配置为esnext或调整lib设置后才能访问这些方法。我们希望这些方法最终能够在稳定的es2024目标中使用。除此之外,TypeScript 还为开发人员提供了新的NoInfer工具类型,让他们能够选择不使用 TypeScript 的类型推断。NoInfer允许开发人员阻止有效却不需要使用的类型。在处理泛型类型参数时,该特性尤其有用。


function createStreetLight<C extends string>(colors: C[], defaultColor?: NoInfer<C>) {  // ...}
createStreetLight(["red", "yellow", "green"], "blue");// ~~~~~~// error!// Argument of type '"blue"' is not assignable to parameter of type // '"red" | "yellow" | "green" | undefined'.
复制代码


在前面的样例代码中,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

2024-03-12 08:004523

评论

发布
暂无评论
发现更多内容

Pencils Protocol与Trust 钱包联合活动,超$200K的积分奖励来了

BlockChain先知

AI造梦师,大模型正在孵化下一个黄金职业

脑极体

AI

AutoMQ 生态集成 MinIO

AutoMQ

Java 云计算 云原生

ChaosMeta V0.7.0 版本发布 & 进入CNCF混沌工程全景图

ChaosMeta

cncf #大模型

Pencils Protocol与Trust钱包联合活动,参与瓜分超$200K的奖励

西柚子

云教室如何促进优质资源共享

青椒云云电脑

云教室 云教室厂商 云教室解决方案

哈银消费金融:科技赋能客诉处理,引领品牌服务新高度

Geek_2d6073

FL Studio荣获业内权威网站推荐最佳DAW fl studio官方中文

阿拉灯神丁

编曲宿主 编曲软件 FL Studio 21 mac音乐制作软件 音乐软件

云桌面系统对服务器配置有要求么

青椒云云电脑

云桌面 云桌面系统

过程流程图怎么画?这样做简单又好看!

彭宏豪95

效率 流程图 在线白板 办公软件 绘图软件

在每一个家庭里,看见数字中国

脑极体

AI 数字中国

30天拿下Rust之切片

希望睿智

rust语言

第53期|GPTSecurity周报

云起无垠

#人工智能 LLM模型

检测 CSS 中的 JavaScript 支持

伤感汤姆布利柏

一文搞懂云桌面,简单易懂

青椒云云电脑

云桌面 云桌面解决方案

桌面云服务器价格怎么样?

青椒云云电脑

桌面云

桌面云服务器有哪些配置?

青椒云云电脑

云服务器 桌面云

如何理解云电脑

青椒云云电脑

云电脑 云电脑平台

30天拿下Rust之字符串

希望睿智

rust语言

第七届数字中国建设峰会召开,天翼云启动开源大模型社区发布暨生态繁荣计划

编程猫

RAG-GPT实践过程中遇到的挑战

Geek_1ef48b

乐曲和弦编配的小技巧有哪些 FL Studio如何编曲

阿拉灯神丁

编曲宿主 教程分享 FL Studio 21 音乐软件

Pencils Protocol与Trust 钱包联合活动,超$200K的积分奖励来了

加密眼界

Pencils Protocol与Trust 钱包联合活动,参与瓜分超$200K的奖励

石头财经

Web3 游戏周报(5.19 - 5.25)

Footprint Analytics

链游

活动预告|与 Zilliz 共探亚马逊云科技中国峰会

Zilliz

AWS Milvus Zilliz

MacBook Air M3有什么游戏推荐 MacBook 怎么玩Windows游戏

阿拉灯神丁

游戏 Mac 软件 CrossOver Mac下载 虚拟机软件 幻兽帕鲁

配置C++的学习环境

芯动大师

编程‘’ C++\

训练效率提升 40%丨多云架构下高效存储策略详解

焱融科技

多云架构 大模型训练 高性能存储

直播预告:TinyVue 组件库实战解析,提升组件库构建技能

OpenTiny社区

开源 Vue 前端 组件库 OpenTiny

Pencils Protocol与Trust 钱包联合活动,超$200K的积分奖励来了

大瞿科技

Typescript 5.4 Beta发布,提供Noinfer工具类型并改善类型推断_大前端_Bruno Couriol_InfoQ精选文章