写点什么

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

评论

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

Week10作业

lggl

作业

区块链 链什么?

CECBC

区块链 分布式

我家有猫

熊斌

生活方式 七日更 我家有猫

框架VS架构,看两者异同

田维常

框架

软件组件设计原则

积极&丧

安全架构:反垃圾与风控

积极&丧

Flink比Spark好在哪?

数据社

flink spark 七日更

七周七并发模型

田维常

并发

架构师训练营第五周作业

zamkai

架构师训练营 大作业(二)

netspecial

极客大学架构师训练营

ARROW阿罗AOW币APP系统软件开发

系统开发

微服务过载保护原理与实战

万俊峰Kevin

微服务 go-zero Go 语言

架构师训练营 大作业(一)

netspecial

极客大学架构师训练营

Java并发底层知识,锁获取超时机制知多少?

李尚智

Java java 并发

Week10总结

lggl

总结 作业

是的,我又换工作了

Rayjun

工作

pagerank算法

橘子皮嚼着不脆

Spring 源码学习 10:prepareBeanFactory 和 postProcessBeanFactory

程序员小航

spring 源码 源码阅读

避坑指南,Elasticsearch 分页查询的两个问题,你一定要知道

AlwaysBeta

elasticsearch python 爬虫

重磅!四部门联合约谈蚂蚁集团!刚刚,约谈的主要内容曝光……

CECBC

金融

数据仓库的前世今生

数据社

数据仓库 七日更

日本准备推行AI婚配,年轻人会为“爱情算法”买单吗?

脑极体

代理模式

soolaugust

设计模式 代理模式 七日更

第五章学习总结

简简单单

从场景出发,日志聚类还可以这么玩

信仰圣光吧丶

AIOPS 日志聚类 日志治理

区块链的核心技术是什么?

CECBC

区块链

安全架构:加密与解密

积极&丧

炎币交易所APP系统开发|炎币交易所软件开发

系统开发

用领域驱动设计驱动系统的重构

积极&丧

架构师训练营第十周笔记

李日盛

学习 微服务 DDD

第五周 技术选型作业

简简单单

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