AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

评论

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

10年后端开发程序员精心整理「C/C++ Linux服务器」 成长路线(附思维导图)

Linux服务器开发

Linux 后端 C/C++ Linux服务器开发 Linux后台开发

设计与思考,关于资源和生命周期(三)

程序员架构进阶

设计模式 架构设计 28天写作 3月日更 池化技术

初识Golang之条件语句

Kylin

基础语法 3月日更 Go 语言

架构师知识笔记2

felix徐

Wireshark数据包分析学习笔记Day24

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

极客时间·产品训练营·第八周作业

二大爷

极客大学产品经理训练营

面试三轮我倒在了一道sql题上——sql性能优化

牧小农

MySQL 数据库 面试 索引 索引优化

程序思维与架构思维

Simon

架构实战营

Spring Boot Feign 使用与源码学习

Yangjing

Feign Spring boot Feign 源码解读

隐式等待、显示等待和强制等待?

Geek_6370d5

Redis 内存碎片清理

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

LeetCode链表专题01: 反转链表

小马哥

Java 链表 LeetCode 数据结构与算法 七日更

一线大厂软件测试流程(思维导图)详解

程序员阿沐

编程 程序员 软件测试 测试工程师 测试流程

那些不得不知的缓存知识

Java 缓存 程序员 面试

蚂蚁开源增强版 SpringBoot,都有高级特性?

Java小咖秀

开源 springboot 蚂蚁金服 SOFA

Redis - RDB

insight

redis 3月日更

(Day31) 变革流程的流程

mtfelix

28天写作 bewriting

小白也能看懂的锁升级过程和锁状态

牧小农

乐观锁 悲观锁 锁升级

看完这篇,再也不怕面试官问我线程池了

牧小农

多线程 高并发 线程池 阻塞队列 拒绝策略

华为 IS-IS防环、泄露

艺博东

网络

火爆全网!2021年最新发布Java面试清单(九大技术点)

比伯

Java 程序员 架构 程序人生 架构师

Redis - AOF

insight

redis 3月日更

go-admin开源项目分析-1[安装、配置、启动]

happlyfox

学习 3月日更 Go 语言 go-admin

畅玩国服LOL?MacBook M1 Windows虚拟机体验

Zhendong

arm MacBook m1

软件工程笔记:学习方法

风翱

软件工程 笔记 3月日更

Go Modules 常见使用陷阱

Rayjun

go modules Go 语言

一篇文章让你彻彻底底理解 I/O 多路复用

Java 程序员 架构 面试 计算机

Go语言的初体验

Phoenix

Go 语言

阿里二面,面试官居然把 TCP 三次握手问的这么细致

鞋子特大号

面试 TCP 三次握手 四次挥手

mysql 检索分享上篇

new life

Python OpenCV 图像标记,取经之旅第 12 天

梦想橡皮擦

3月日更

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