写点什么

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

评论

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

爬虫入门经典(十二) | 一文带你快速爬取豆瓣电影

不温卜火

python 爬虫

LeetCode题解:198. 打家劫舍,动态规划(不缓存偷盗状态),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Prophecis 0.2.0 版本发布

WeDataSphere

机器学习 大数据 学习 WeDataSphere

Three.Js杂记(一)——起步

空城机

大前端 WebGL 3D可视化 three.js

助力香港成为全球寿命最长的城市,我们如何看医管局的数字化转型?

有只小耳朵

数字化转型 人才培养

MyBatis-Plus实现自动填充createTime和updateTime

棉花糖

springboot MyBatisPlus

一文看懂特权访问管理(PAM)

龙归科技

云计算 云存储

想当程序员,如何判断自己是否适合当前端程序员?

孙叫兽

程序员 大前端 引航计划

大前端工程师进阶之路,Node全栈为前端带来更多可能

孙叫兽

大前端 全栈 Node

爬虫入门经典(四) | 如何爬取豆瓣电影Top250

不温卜火

python 爬虫

Git教程 - Git 命令与操作

码语者

git DevOps

前置机器学习(一):数学符号及希腊字母

caiyongji

机器学习

它终于来了!

Python研究所

Python

前置机器学习(三):30分钟掌握常用NumPy用法

caiyongji

机器学习

源码分析Netty:核心组件及启动过程分析

程序员架构进阶

架构 Netty 源码剖析 28天写作 3月日更

Three.js杂记(二)——绘制点、线、面

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

Three.js杂记(三)—— 物体运动

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

爬虫入门经典(七) | 一文带你爬取淘宝电场

不温卜火

python 爬虫

前置机器学习(五):30分钟掌握常用Matplotlib用法

caiyongji

机器学习

Python-计算机视觉-OpenCV-Image

Aldeo

Python OpenCV 计算机视觉

前置机器学习(四):一文掌握Pandas用法

caiyongji

机器学习

2.4 Go语言从入门到精通:条件和循环

xcbeyond

3月日更 Go 语言

前置机器学习(二):30分钟掌握常用Jupyter Notebook用法

caiyongji

机器学习

如何巧妙的去除数组中的空格?

程序媛观澜

c++ 字符串

爬虫入门经典(十五) | 邪恶想法之爬取百度妹子图

不温卜火

python 爬虫

爬虫入门经典(十八) | 滑动验证码识别

不温卜火

python 爬虫

新思科技BlackDuck帮助Avira软件公司在保持DevOps速度的同时提升开源安全

InfoQ_434670063458

如何利用VGG19实现insightface人脸识别?

程序媛观澜

机器学习 人脸识别

【实战问题】-- 缓存穿透,缓存击穿和缓存雪崩的区别以及解决方案

秦怀杂货店

Java redis 缓存 架构 分布式

波卡生态DeFi系统开发方案

薇電13242772558

区块链 defi

初来乍到,请多关照

空城机

杂记

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