QCon北京开幕在即|与全球 140+ 顶尖工程师共同解构 AI 时代的技术浪潮 了解详情
写点什么

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

评论

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

图片懒加载

源字节1号

软件开发

微服务架构组件总结篇

邱学喆

负载均衡 Spring Cloud 注册中心 配置中心 熔断服务

简单剖析开发:区块链杠杆合约交易所的核心优势

W13902449729

区块链交易所 合约交易所开发

HTML学习笔记(二)

lxmoe

html 前端 学习笔记 11月月更

架构实战营模块 4 作业

陌生流云

#架构实战营

JavaScript基本数据类型和引用数据类型详解

肥晨

js 11月月更 数据结构js

QUIC不是TCP的替代品

俞凡

TCP 网络 QUIC

SQL Sever提供的字符串类型

乔乔

11月月更

随机森林-概述

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

从3开始,在业务系统中增加分页功能

闫同学

go语言 11月月更 后端系统

Java中的内部类与匿名内部类详解

共饮一杯无

Java 内部类 11月月更 匿名内部类

【LeetCode】爱生气的书店老板Java题解

Albert

算法 LeetCode 11月月更

云原生系列四:Yelp 如何在 Kubernetes 上运行 Kafka

叶秋学长

kafka Kubernetes 云原生 11月月更

Vue组合式函数(二)封装一个请求

Augus

Vue3 11月月更

从零到一带你构建可靠的大型分布式系统,不愧是IT领域又一神作!

Java永远的神

Java 分布式 程序人生 后端 架构师

永续合约交易所的开发有哪些特征?

W13902449729

合约交易所开发 区块链交易所开发

【kafka运维】TopicCommand运维脚本

石臻臻的杂货铺

kafka Kafka实战 kafka运维 11月月更

Redis 的 Sentinel 系统

月明风清

redis Sentinel 系统 哨兵机制

pyside6 qml 支持更新液位的伪3D圆柱

Mr_No爱学习

下一代TCP: 网络演进的平台

俞凡

TCP 网络

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(2)

百里丶落云

数据库 后端 11月月更

美图是如何搭建压测监控一体化平台的?

TakinTalks稳定性社区

压测平台

学生管理系统考试试卷存储方案设计

乖乖IvyShine

还担心接口乱糟糟?快来试试“斯瓦格”在线文档管理平台!

wljslmz

华为云 接口管理 swagger 11月月更

去哪儿的常态化容量保障是怎么做的?

TakinTalks稳定性社区

一款设计和模拟数字逻辑电路的LogiSim工具

芯动大师

集成电路 Verilog 11月月更 logisim 模电与书店

超全!前端面试题大汇总

肥晨

前端面试题 11月月更 超全前端面试题

Grafana 最新开源项目 Phlare 速体验

Grafana 爱好者

云原生 可观测性 Grafana 11月月更

易观千帆 | 2022年9月银行APP月活跃用户规模盘点

易观分析

金融 手机银行

Go语言入门13—并发

良猿

Go golang 后端 开发 11月月更

2022-11-05:给定一个逆波兰式,转化成正确的中序表达式。要求只有必要加括号的地方才加括号。

福大大架构师每日一题

算法 rust 福大大

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