写点什么

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

评论

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

企业组网指南:SD-WAN异地组网带宽需要多大?

Ogcloud

SD-WAN服务商 异地组网 异地组网带宽 组网带宽 SD-WAN厂商

5G-A的尔滨故事,冰雪下的科技春潮

脑极体

AI

低代码技术驱动OKR管理:企业级目标落地的工程化实践

不在线第一只蜗牛

OKR 低代码

鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目

Apache Flink

大数据 flink 实时计算

北京中烟创新科技有限公司:资质与荣誉的双重里程碑

中烟创新

YashanDB访问约束

YashanDB

数据库 yashandb

YashanDB索引介绍

YashanDB

数据库 yashandb

恭喜 AutoMQ 签约客攀科技应用在 AI 广告大模型

AutoMQ

kafka AI 跨境电商 大模型 广告投放

原生IP和广播IP查询方法

Ogcloud

海外原生IP 原生IP 广播IP 原生IP查询

深度剖析多任务模型 QAT 策略

地平线开发者

自动驾驶 算法工具链 地平线征程6

自动化清理Git分支:PowerShell脚本指南

雄鹿 @

git PowerShell

NocoBase 本周更新汇总:支持全局和批量数据触发自定义操作事件

NocoBase

开源 低代码 零代码 无代码 版本更新

2 行代码,15 分钟部署对话式 AI Agent!丨社区来稿

声网

工时管理软件对比:8大系统全方位评测

易成研发中心

项目工时管理

Hume AI 即将推出新 AI 语音产品;声网上线对话式 AI 引擎,15 分钟让 DeepSeek 开口说话丨日报

声网

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

极限实验室

elasticsearch

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