【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

评论

发布
暂无评论

大神级插件ScriptRunner案例分享

跟YY哥学Jira

Jira automation ScriptRunner

设计模式:责任链模式学习笔记

Changing Lin

12月日更

架构复杂度分析

tony

「架构实战营」

语音信号处理 4:语音的声学特征

轻口味

AI 28天写作 12月日更

分析下微信朋友圈的高性能复杂度

Anlumina

#架构实战营

CSS之选择器(十一):focus-within

Augus

CSS 12月日更

大系统中的线下团队

张老蔫

28天写作

equals方法通用约定

李子捌

Java 28天写作 12月日更

【架构实战营】模块二:命题作业

wgl

「架构实战营」

A 5G Odyssey :2021北京漫游

脑极体

作业:架构实战营模块 2

Poplar89

「架构实战营」

「架构实战营」模块二《如何抓住架构设计的关键点》作业

DaiChen

作业 模块二 「架构实战营」

如何配置 Nessus 漏洞扫描策略?

Ethereal

网络安全 漏洞扫描 网络技术联盟站 Nessus

模块九作业

bob

「架构实战营」

架构实战营模块二作业

Poplar

架构实战营

读《思辨与立场》-06 思维的要素 -02

wood

28天写作 批判性思维 思辨与立场

18《重学JAVA》--JAVA异常(二)

杨鹏Geek

Java25周年 28天写作 12月日更

Dubbo框架学习笔记六

风翱

dubbo 12月日更

Volatile 初探和 Java 内存模型

悟空聊架构

SpringCloud 28天写作 passjava 悟空聊架构 12月日更

第二模块学习总结

Anlumina

#架构实战营

模块二作业——微信朋友圈高性能复杂度分析

木几丶

「架构实战营」

PoE、PoE+、PoE++ 三款交换机如何选择?一文带你了解!

Ethereal

交换机 运维技术 PoE 弱电工程

架构实战训练营 - 模块 3- 作业

温安适

「架构实战营」

homework02

王欣欣

「架构实战营」

架构实战模块2作业

holdzhu

「架构实战营」

模块2

Geek_59dec2

架构实战营

微信朋友圈高性能复杂度

阿门阿前一颗葡萄树๑

架构实战营 #架构实战营 「架构实战营」

Java程序中如何正确的释放资源

李子捌

Java 28天写作 12月日更

原型模式

卢卡多多

28天写作 12月日更 原型模式

SRE在安全方面可以做点啥

勇往直前的胖子

【架构实战营】模块二:知识点总结

wgl

「架构实战营」

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