写点什么

TypeScript 4.5 发布,带来 Promise 功能改进

  • 2021-11-19
  • 本文字数:1897 字

    阅读完需:约 6 分钟

TypeScript 4.5 发布,带来 Promise 功能改进

11 月 17 日,微软发布 TypeScript 4.5 正式版本,本次更新,带来大幅功能更新和性能改进,包括引入 Awaited 类型和 Promise 改进,用于增强异步编程、引入 es2022 模块、支持 Import 断言等。具体更新内容如下:

Awaited 类型与 Promise 改进

 

在此前的版本中,要获取 Promise 的返回类型,必须使用 infer 功能,如下所示:


type Unwrap<T> = T extends PromiseLike<infer U> ? U : T;const resultPromise = Promise.resolve(true);// resultUnwrapType is boolean type resultUnwrapType = Unwrap<typeof resultPromise>;
复制代码

 

TypeScript 4.5 引入了一种新的实用程序类型: Awaited 类型,你不需要像上面的 Unwarp 那样自定义映射类型,举例如下:


type resultUnwrapType = Awaited<typeof reAvailable only under nightly releasessultPromise>;
复制代码

 

该工具还有以下功能:

 

  • 递归解包

  • 不依赖 PromiseLike 更稳健

  • 利用 Awaited<T> ,为 Promise.allPromise.racePromise.allSettledPromise.any 增加重载

 

下面看一些不同的用例

// type is stringtype basic = Awaited<Promise<string>>;// type is stringtype recursive = Awaited<Promise<Promise<string>>>;// type is booleantype nonThenObj = Awaited<boolean>;// type is string | Datetype unions = Awaited<Date | Promise<Promise<string>>>;type FakePromise = { then: () => string };// type is nevertype fake = Awaited<FakePromise>;
复制代码

在 Nightly 版本支持  Node.js 运行 ECMAScript 模块

 

Node.js 的模块基础一直是 CommonJS,随着多态应用的转变,支持 ECMAScript 模块的要求也越来越高。过去几年时间里,Node.js 一直在努力支持运行 ECMAScript 模块。从 Node.js 12 版本开始,对 ES 模块的支持就很广泛了。

ES 模块带来了什么

 

  • 使用 import/export 语句语法

  • 顶级 await 可与 nodenext 一起使用

  • 因为现在有不同的模块策略 ES 模块相对导入需要完整的文件扩展名: import fade from ./utils.js

  • 一些全局关键字,如 require 在 ES 模块上不起作用

  • CommonJS 将转译 ES 特性,如 import/export 语法

 

目前该功能仅在 TypeScript Nightly 版本中可用。

node_modules 支持 lib

 

为了确保 TypeScript 和 JavaScript 能够开箱即用,TypeScript 捆绑了一系列声明文件(.d .ts 文件)。这些声明文件表示 JavaScript 语言中可用的 API 和标准的浏览器 DOM API。虽然根据文件目标有一些合理的默认值,但你可以通过在 tsconfig.json 中配置 lib 设置,来挑选程序使用哪些声明文件。

 

TypeScript 4.5 引入了一种覆盖特定内置库的方法,类似于 @types/support 的工作方式。在决定 TypeScript 应该包含哪些 lib 文件时,它首先会在 node_modules 中寻找一个有作用域的 @typescript/lib-* 包。例如,当在 lib 中包含 dom 选项时,TypeScript 会使用 node_modules/@typescript/lib-dom 中的类型。

 

然后可以安装一个特定的包来接管给定的库。例如,现在 TypeScript 在 @types/web 上发布 DOM API 版本。如果你想锁定你的项目到一个特定版本的 DOM API,可以添加这个到你的 package.json:

 

{ "dependencies": {    "@typescript/lib-dom": "npm:@types/web"  }}
复制代码

从 TypeScript 4.5 开始,依赖管理器的锁文件(lockfile)会确保使用的 DOM 类型的版本完全相同。

其他新特性:

 

  • 引入 es2022 模块:TypeScript 现在支持一个新的模块设置:es2022。es2022 模块的主要功能是顶层 await,意味着开发者可以在 async 函数之外使用 await。这在模块 esnext(以及现在的模块 nodenext)中已经得到支持,但 es2022 是这个功能的第一个稳定目标。

  • 模板字符串可以用作判断符:TypeScript 4.5 现在可以缩小具有模板字符串类型的值,并且还将模板字符串类型识别为判别式。

  • 新的代码段补全:TypeScript 4.5 带来了两个新的代码段补全,这些补全添加了一些默认文本,并允许开发人员可能通过标签查看想要调整的代码片段。

  • 支持 import 断言:TypeScript 4.5 支持 ECMAScript 关于导入断言的提议,这是运行时使用的一种语法,以确保导入有一个预期的格式。

  • 私有字段检查:开发人员现在可以编写一个具有 #private 字段成员的类,并使用 in 运算符查看另一个对象是否具有相同的字段,以用于检查对象上是否具有私有字段。

  • JSDoc 中的常量断言和默认类型参数

  • 更快的加载时间:对所有系统的 Node.js 引入 realpathSync.native 函数, 减少项目加载时间(Windows 少了 5-13%)。

  • 更好的编辑器支持:对未解析的类型会直接展示原名(之前版本是用 any 来代替未解析的类型)

 

参考链接:

 

https://devblogs.microsoft.com/typescript/announcing-typescript-4-5/

2021-11-19 11:215715

评论

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

第九周作业

Geek_4c1353

极客大学架构师训练营

迁移到 Atlassian Data Center 并没有您想象的那么可怕

Atlassian

负载均衡 高可用 Atlassian Jira

字节面试数据结构与算法:B+树的删除和插入,不够详细你打我

小Q

Java MySQL 学习 面试 算法

区块链加持,鉴定溯源双保险,科技赋能茅台老酒成零售数字化标杆

CECBC

区块链 大数据 防伪溯源

数字货币步伐加快,苏州将于双十二推出数字人民币红包测试

CECBC

数字人民币

详解企业管理系统工作流配置

Marilyn

敏捷开发 工作流 软件架构

上线操作规范——基础版本

程序员架构进阶

团队管理 开发流程 发布流程 规范

为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读

葡萄城技术团队

字节跳动内部授课课件:附图讲解MySQL底层索引结构算法实现

小Q

Java MySQL 学习 编程 面试

LeetCode069-x的平方根-easy

书旅

数据结构 算法 Go 语言

从基础设施到云原生应用,全方位解读阿里云原生新锐开源项目

阿里巴巴云原生

阿里云 开源 云原生

一个隐藏在方法集和方法调用中且易被忽略的小细节

Gopher指北

后端 Go 语言

数字货币将使货币政策实施更精准有效

CECBC

数字货币

解读下一代网络:算力网络正从理想照进现实

华为云开发者联盟

AI 5G 网络 云技术

0到1产品需求整理分析模型参考

燕陈华

产品设计 产品需求

华为云MVP付健权:从机械工程师到AI开发者的华丽转身

华为云开发者联盟

AI 转型 工程师

软件测试系统学习流程和常见面试题

测试人生路

软件测试

“人上人”大专学历,通过系统的六个学习步骤,艰难4面终砍offer,“跳进”字节跳动

Java架构追梦

Java 架构 字节跳动 面试 微服务

开发霸总:我要让所有人知道,这个扫码组件,被你承包了

蚂蚁集团移动开发平台 mPaaS

支付宝 uniapp mPaaS

Serverless 架构就不要服务器了?

华为云开发者联盟

云计算 Serverless 架构

Java程序员说:世界上有三个伟大的发明【火、轮子、kafka】

Java架构师迁哥

第九周 性能优化(三)总结

蓝黑

极客大学架构师训练营

架构师训练营第 1 期 第 9 周作业

李循律

极客大学架构师训练营

排序与二分

落曦

阿里云原生中间件首次实现自研、开源、商用“三位一体”,技术飞轮效应显现

阿里巴巴云原生

阿里云 云原生 中间件

除了类 Excel, SpreadJS 表格控件还能为系统开发带来什么价值?

葡萄城技术团队

架构训练营 - 第9周课后作业 - 学习总结

Pudding

Minikube-运行在笔记本上的Kubernetes集群

网管

学习 Kubernetes k8s minikube k8s入门

云原生趋势下的迁移与容灾思考

阿里巴巴云原生

云原生 迁移 容灾

披星戴月地辛苦割胶或成历史,海南胶园迎来这一“神器”!

华为云开发者联盟

云计算 大数据 IoT

iOS AOP 方案的对比与思考

GrowingIO技术专栏

ios aop

TypeScript 4.5 发布,带来 Promise 功能改进_语言 & 开发_辛晓亮_InfoQ精选文章