写点什么

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

评论

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

gdb调试工具使用

正向成长

gdb

【全网首发】2021 年从iOS初级到大牛,涵盖大部分iOS开发知识体系,不会没收藏吧!

一意孤行的程序员

swift 面试 ios开发 底层应用开发 知识分享

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

阿里巴巴云原生

Serverless 容器 微服务 开发者 云原生

Go Channel

escray

学习 极客时间 Go 语言 4月日更

Linux nslookup 命令

一个大红包

Linux linux命令 4月日更

工作三年,小胖连 HashMap 源码都没读过?真的菜!

一个优秀的废人

扩容 hashmap 源码剖析 HashMap底层原理 加载因子

时间很贵,有趣才对

小天同学

读书笔记 读书感悟 好书推荐 有趣 4月日更

英特尔Ice Lake对于高性能计算市场意味着什么

E科讯

Rust从0到1-代码组织-Packages和Crates

rust Package crate

JVM 读书笔记(一) 内存划分

U2647

JVM 4月日更

专访前美篇首席架构师张超|从工程师到CTO的蜕变

Aldeo

程序员 采访 调查采访能力考核

如何缓解低代码开发的安全风险

YonBuilder低代码开发平台

小程序云开发 开发者 低代码 APP开发 APICloud

苦难中开花|靠谱点评

无量靠谱

手机淘宝轻店业务 Serverless 研发模式升级实践

Serverless Devs

阿里云 Serverless 云原生 淘宝

数字化转型:打破孤岛以提高数据安全性

龙归科技

数字化

TO B产品从0到1:从项目中走出来

菜根老谭

产品孵化

Zip和7-zip谁更强,如何选择?

麦洛

ZIP格式 ZIP zip4j

产业级项目实战配合技术讲解,百度零门槛AI开发实训营重磅开营

百度大脑

百度 AI

专访阿里巴巴研究员吴翰清 | 安全的持续运营之道

架构精进之路

4月日更 调查采访能力考核 人物访谈

如何批评下属?

石云升

团队建设 28天写作 职场经验 管理经验 4月日更

腾讯iOS开发要达到咋样的水准?

一意孤行的程序员

flutter 职业规划 音视频 ios开发 iOS逆向

低代码真能做到“让人人都能做开发者”吗?

优秀

低代码

百度南渡,护航泉州水务的产业智能化征程

脑极体

架构师实战营 模块一总结

代廉洁

架构实战营

话题讨论|To B & To G,互联网公司的下一主战场

程序员架构进阶

话题讨论 28天写作 4月日更 To B业务 领域思考

万字长文,38 图爆肝 Redis 基础!

一个优秀的废人

redis 数据结构 集合 哈希表 跳表

阿里P8带你学习:一次线上服务高 CPU 占用优化实践

学Java关注我

Java 编程 架构 程序人生 软件架构

YouTube如何下载1080P的高清视频带声音?5种方法可以搞定

右手牵

下载 视频 youtube

随机而转 当机而动|靠谱点评

无量靠谱

云洲链硬核支撑!济南标识解析二级节点解析量全国第一

云计算

不忘初心,中级领导力修炼

IT民工大叔

领导力 管理

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