写点什么

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:004584

评论

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

纵观 Excel 演化史,开发者如何通过“表格技术”提升企业生产力

葡萄城技术团队

Excel SpreadJS

来啦!2020 Java开源项目权威排名解读:Spring Boot排名稳定、Shiro未上榜

JavaGuide

开源 springboot springsecurity shiro

重学JS | 深入理解Object,必会知识点汇总

梁龙先森

大前端 编程语言

大作业2

走走,停停……

mybatis使用及SQL语句优化小结

华为云开发者联盟

数据库 mybatis 索引 实用SQl语句

在线教育的发展

anyRTC开发者

AI 音视频 WebRTC 在线教育

深入讲解拉链表,还怕面试官问?

大数据老哥

大数据 数据模型 数仓项目

真牛!成功跳槽百度工资从15K涨到28K,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

从 RxJS 到 Flink:如何处理数据流?

Apache Flink

flink 流计算

招聘 | 腾讯云大数据,期待您的加入!

腾讯云大数据

大数据

从源码层面理解ArrayList 扩容策略

geekymv

Java 扩容 ArrayList

数仓实时化改造:Hudi on Flink 在顺丰的实践应用

Apache Flink

flink 流计算

3轮技术面+总监面+HR面轻松砍下阿里口碑Offer!

Java架构追梦

Java 面试 架构师 口碑Offer

涨知识!Android面试真题解析火爆全网,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

区块链加密货币钱包系统APP开发|区块链加密货币钱包软件开发

系统开发

依赖倒置原则与单一接口隔离原则

Andy

看透Spring MVC源代码分析与实践

田维常

Java

为PostgreSQL的表自动添加分区

PostgreSQLChina

数据库 postgresql 开源

大作业一

走走,停停……

创业公司用 Serverless,到底香不香?

Serverless Devs

Java Serverless 运维 云原生 大前端

京东面试:说说MySQL的架构体系

田维常

MySQL

原始时代对分布式架构的探索

证明谁才是第一

这些面试题你会吗?为什么有人说Android开发不再吃香?最全的BAT大厂面试题整理

欢喜学安卓

android 程序员 面试 移动开发

大作业二--知识点整理

Nick~毓

图灵测试已过时,AI 需要新基准测试;别了Flash,Adobe播放器正式停运

京东科技开发者

云计算 AI 量子计算机

Selenium高效拍档-HtmlUnit

dothetrick

Java 自动化测试 测试开发

GitHub 的野心,5600 万开发者的新社区

打工人 Coco

GitHub 开源 开源社区

七大关于DevOps的误解,你中了几招?

禅道项目管理

DevOps 运维 开发 自动化测试

Spark 3.0 关键新特性回顾

hanke

大数据 spark 开源

前端异常监控 Sentry 的私有化部署和使用

智联大前端

大前端 监控 异常 sentry 错误

中国用户规模最大教育科技独角兽作业帮再获投资机构青睐

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