写点什么

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

评论

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

2021年Android社招面试题,薪资翻倍

android 程序员 移动开发

2021年Android程序员职业规划,查缺补漏

android 程序员 移动开发

2021金九银十,动脑学院官网

android 程序员 移动开发

Android体系化进阶学习图谱,动脑学院课程值得买吗

android 程序员 移动开发

2021Android面试笔试总结!html5移动开发即学即用网盘

android 程序员 移动开发

DeFi平台挖矿系统需求开发(现成案例)

2021年字节跳动74道高级程序员面试,百度Android岗一面+二面内容

android 程序员 移动开发

2021最新网易Android面试题目,2021Android架构面试指南

android 程序员 移动开发

Activity的6大难点你会几个,面试复盘

android 程序员 移动开发

Android开发社招面试解答之性能优化,Android开发面试题及答案

android 程序员 移动开发

跨越行业绊脚石,阿里云函数计算发布7大技术突破

阿里巴巴中间件

阿里云 云原生 中间件 函数计算 云栖大会

2021京东Android面试真题,享学课堂android怎么样

android 程序员 移动开发

Android中高级面试必知必会,Android学习路线

android 程序员 移动开发

Android事件分发机制及设计思路,Android程序员校招蚂蚁金服

android 程序员 移动开发

2021年安卓社招面试题精选,顺利拿到offer

android 程序员 移动开发

AndroidHook机制连简单实战都不会凭什么拿高薪,Android开发两年

android 程序员 移动开发

Android事件分发机制收藏这一篇就够了,阿里一线架构师技术图谱

android 程序员 移动开发

Android免打包多渠道统计如何实现,技术实现

android 程序员 移动开发

Android开发岗还不会这些问题,15个经典面试问题

android 程序员 移动开发

阿里云混合云Apsara Stack 2.0发布,加速政企数智创新

Lily

Android大厂面试真题解析大全,腾讯T3大牛手把手教你

android 程序员 移动开发

Android小程序开发实例,扔物线五期

android 程序员 移动开发

每秒创建百万文件,百度沧海·文件存储CFS推出新一代Namespace架构

百度开发者中心

架构 文件存储 cfs

42岁程序员面试,动脑学院vip课程百度云

android 程序员 移动开发

打破 Serverless 落地边界,阿里云 SAE 发布5大新特性

互联网 科技

Android开发入门教程!扔物线学堂

android 程序员 移动开发

Android外包是如何转正网易的,大厂Android核心面试题出炉

android 程序员 移动开发

分布式事务最经典的七种解决方案

Java 程序员 架构 面试 分布式

2021大厂安卓知识点总结,字节跳动学习笔记

android 程序员 移动开发

2021年阿里+腾讯+快手offer都已拿到,Android开发实战

android 程序员 移动开发

997页手淘Android面试真题解析火爆全网,Android基础72问

android 程序员 移动开发

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