typescript Awaited<Type>教程用法

这篇具有很好参考价值的文章主要介绍了typescript Awaited<Type>教程用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

typescript Awaited教程用法

ts4.5发布了Awaited,但是很多人不明白Awaited的用法。

首先看一下官方的说明:这种类型旨在模拟函数await中的操作async,或 s.then()上的方法——特别是它们递归解包Promise的方式。

首先看一个例子:

async function test() {
  let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))
  let bb = await aa;
}
test();

这里我们可以正确得到bb类型为string

在js中和ts中,await和.then()都能递归得到一个非Promise的。Awaited就是模仿这种行为,递归解包获取其中的类型。不理解没事,继续往下看:


let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))

还是这段代码

我们想设置一个别名 cc 的类型为 aa 的Promise异步操作返回值的类型

该怎么做?

或许有人认为,直接设置 string 类型不就好了:

let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))
type cc = string;

但这样真的好吗,很多请求或者异步操作返回值可能都是不固定,当然,除非你定死它返回的必须是string类型。如果这样或许你真的不需要Awaited了。


进行下面内容开始之前,你脑海中需要有一个印象:

let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))
type cc = typeof aa 

其中cc的类型为 Promise<string>,这很重要。=所以,看到这里,我们要做的就是取出Promise中的string(也可能是其他,总之是尖括号里的内容)。=

推荐你每一步都手动操作一下,地址:typescript在线运行


接下来使用另一种方法:

let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))
type cc = typeof aa extends Promise<infer U> ? U : typeof aa;

在 Awaited 还没出来之前,一般使用这种方法获取异步操作返回值的类型。首先判断 typeof aa 是否为 Promise,如果是则取出其中的类型,如果不是,则直接返回typeof aa

肉眼可见,确实不方便:

接下来使用 Awaited:

let aa = Promise.resolve(Promise.resolve(Promise.resolve('hello world')))
type cc = Awaited<typeof aa>

是不是很简洁。

如果你用过infer,到这里基本上就理解了。


为什么这里使用 typeof aa :

  • 这里的aa其实是一个值,而type需要一个类型,所以我们需要一个关键字typeof获取aa的类型。

既然typeof aa 就表示类型,为什么还要Awaited<>:

  • 上文说了,typeof aa 会返回Promise<string>,而这篇文章主要讲的内容就是获取异步操作返回值的类型。

看一个例子:

type aa = Promise<Promise<Promise<string>>>
type cc = Awaited<aa>

如果 aa 是类型,则我们可以直接使用 Awaited<aa>,我们cc的类型为string类型。文章来源地址https://www.toymoban.com/news/detail-444678.html

到了这里,关于typescript Awaited<Type>教程用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • typescript中interface和type的区别

    在TypeScript中,interface和type都用于定义类型,但它们有以下区别: 语法 interface使用interface来定义类型,而type使用type来定义类型。 定义方式 interface 可以通过继承其他interface来扩展自身的属性和方法,也可以多次声明同名的interface,它们会自动合并成一个接口。

    2024年02月16日
    浏览(36)
  • TypeScript中 interface 和 type 的区别

    区别1 使用 interface 和 type 都是表示给定数据结构的常用方法。 定义的方式略有不同。 type 定义的时候有 “=” 符号 区别2 interface 可以多次声明同一接口。它们将合并在一起形成一个接口定义。 type 只能声明一次。 interface:可以多次声明,并最终可共同复用; type:再次声明

    2024年02月14日
    浏览(28)
  • 深入理解 TypeScript 的 type 以及 type 与 interface 和 class 的区别

    TypeScript 是一种强类型的 JavaScript 超集,它为 JavaScript 提供了静态类型系统。在 TypeScript 中,我们可以使用 type 、 interface 和 class 为数据定义类型。本文将重点介绍 type 的作用以及它与 interface 和 class 的区别。 type type 是 TypeScript 中用于定义类型别名、联合类型、交叉类型等复

    2024年02月03日
    浏览(32)
  • TypeScript 中的 type 关键字有什么用?

    创建类型别名 在 TypeScript 中,type 用于创建类型别名(Type Alias)。类型别名可以给一个类型起一个新的名字,使代码更具可读性和可维护性。 类型别名可以用于定义各种类型,包括基本类型、复合类型和自定义类型。通过 type ,可以为复杂的类型定义提供一个

    2024年02月08日
    浏览(29)
  • 在 TypeScript 中 interface 和 type 的区别

    在 TypeScript 中, interface  和  type  都用于定义自定义类型,但它们有一些区别: 语法风格: interface  使用  interface  开头,而  type  使用  type  开头。例如: 扩展和实现: interface  可以通过继承或合并来扩展其他接口,并支持类实现。而  type  在定义类型

    2024年02月13日
    浏览(29)
  • 【TypeScript】TS中type和interface在类型声明时的区别

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏: vue3+vite+typeScript从入门到实践 📢 资料领取:前端进阶资料可以找我免费领取 🔥

    2023年04月26日
    浏览(54)
  • TypeScript快速上手语法+结合vue3用法

            前言:             本篇内容不涉及TypeScript安装以及配置,具体安装及配置篇可以看下面目录,本篇只涉及TypeScript语法相关内容,及结合vue3的用法。不讲废话,简单直接直接开撸。 目录      TypeScript的具体安装及配置  TypeScript快速上手语法+结合vue3用法 1、

    2024年02月03日
    浏览(28)
  • 16.【TypeScript 教程】TypeScript 泛型(Generic)

    本节开始介绍 TypeScript 一些进阶知识点,第一个要介绍的泛型是 TypeScript 中非常重要的一个概念,它是一种用以增强函数、类和接口能力的非常可靠的手段。 使用泛型,我们可以轻松地将那些输入重复的代码,构建为可复用的组件,这给予了开发者创造灵活、可重用代码的能

    2024年01月18日
    浏览(33)
  • TypeScript教程(一)在vscode中的配置TypeScript环境

    未来的开发者们请上座,随着时代的发展web网页的发展越来越丰富,掌握TypeScript显得更加有必要。 安装Node.js:首先,确保您已经安装了Node.js。您可以从Node.js官方网站(https://nodejs.org)下载并安装适合您操作系统的版本。 npm 切换淘宝镜像源 查询镜像使用状态 npm 安装TypeS

    2024年01月24日
    浏览(41)
  • 菜鸟教程笔记:TypeScript

    1.在ts文件中:Runoob.ts 2.通过tsc命令编译 3.得到js代码:Runoob.js 4.使用node来执行js代码 我们可以同时编译多个ts文件: ts会忽略 空格 , 制表符 , 换行符 理解:对现实世界理解和抽象的方法 面向对象有两个概念:对象和类 对象:类的一个实例,有状态和行为。 类:是一个模板

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包