最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

评论

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

混合多云环境下的云成本管理与优化

鲸品堂

成本优化 实践案例 云资源

使用CSS绘制一支口红

战场小包

CSS 口红 2月月更

ZEGO音视频服务的高可用架构设计与运营

ZEGO即构

架构 后台 高可用架构 音视频开发

百度可观测系列 | 采集亿级别指标,Prometheus 集群方案这样设计

百度开发者中心

如何用AI技术增强企业认知智能?超详细架构解读

博文视点Broadview

在线键盘按键检测工具

入门小站

工具

一周信创舆情观察(2.14~2.20)

统小信uos

如何通过 Jira Service Management 打造员工自助服务工具实现高效分布式工作

Atlassian

敏捷 Jira 远程协作 ITSM 开发管理

Apache ShardingSphere 企业行|走进搜狐

SphereEx

数据库 开源 ShardingSphere SphereEx 搜狐

三维仿真智慧服务器 —— 信息安全监控平台

一只数据鲸鱼

信息安全 数据中心 数据可视化 智慧城市

创新推出 | Serverless 调试大杀器:端云联调

Serverless Devs

【元宵节快乐】Apache ShardingSphere 企业行|走进陌陌

SphereEx

数据库 开源 企业 ShardingSphere SphereEx

人才短缺、成本高昂,制造企业智能化转型路径如何破局?

百度开发者中心

FinClip邀你来出战|Hackthon Coding Party 一触即发

FinClip

前端SSR的落地实践

百度Geek说

百度 前端 SSR

这把“锁”不简单,让你畅游数字世界

华为云开发者联盟

SSL证书 ssl HTTP协议 HTTPS协议加密

GPUSHARE-会员重磅上线啦~

恒源云

gpu 学生党

Clusterpedia 加持 kubectl,检索多集群资源

Daocloud 道客

云原生 开源项目 K8s 多集群管理

2种图像增强方法:图像点运算和图像灰度化处理

华为云开发者联盟

图像处理 图像 图像增强 图像点运算 灰度化处理

【WEB安全】轻松检测钓鱼网站的技巧#建议收藏#

H

网络安全 WEB安全 钓鱼网站

k8s 源码Client-go中Reflector解析

华为云开发者联盟

Kubernetes Informer 事件 Client-go Reflector

美容机构预约小程序设计方案

CC同学

TinTin Meeting#3回放|NNS里面的Registry Canister

TinTinLand

区块链 Dfinity TinTin Meeting

从 generator 的角度看 Rust 异步代码

SOFAStack

rust Generator

直播预告 | PolarDB-X 动手实践系列——如何在 PolarDB-X 中进行 Online DDL

阿里云数据库开源

数据库 阿里云 开源 polarDB

无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口

crudapi

postgresql API crud crudapi 抽象工厂设计模式

CNCF 沙箱项目 OCM Placement 多集群调度指南

阿里巴巴云原生

阿里云 云原生 OCM Placement

F6 汽车科技基于 Apache ShardingSphere 的核心业务分库分表实践

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

海关监管区域之陆路口岸作业

Geek_XOXO

国际贸易 海关监管 口岸

海关监管区域之港口作业

Geek_XOXO

国际贸易 海关监管 港口作业

超27亿人参与!“云上冬奥”背后的技术革新

阿里云弹性计算

阿里云 冬奥会

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