Ts类型体操详讲 之 extends infer (下)

目录

1、函数

(1)提取参数类型

(2)提取返回值类型

2、构造器

(1)提取构造器返回值

(2)提取构造器参数类型

3、索引类型


本章我们继续上节的内容继续,展示我们对extends infer的其他用法

1、函数

(1)提取参数类型

我们可以通过 extends 和infer去提取参数的类型

首先,我们定义了一个名为 fn 的类型别名,它代表了一个函数类型,

这个函数接受四个参数:name(类型为 string)、b(类型为 number)、c(类型为 boolean)和 d(类型为 object),并且不返回任何值(返回类型为 {},即 void)。

接下来,我们定义了一个名为 ExtractParameters 的泛型类型别名,它使用了条件类型和类型推导来提取函数的参数类型:

这里的关键是 infer Args。在条件类型中,infer 关键字允许我们为类型变量创建一个新的名字,并从上下文中推断其类型。

  • 如果 fn 是一个函数类型,并且它的参数被解构为 ...args,那么 Args 将会被推断为这些参数的类型。

  • 如果 fn 不是一个函数类型,那么 Args 将永远不会被推断,因此该类型将简化为 never

戳我查看源码

(2)提取返回值类型

同样我们也能提取返回值的类型

  • fn extends (...args: any[]) => infer ReturnType ? ReturnType : never 是一个条件类型。条件类型允许我们根据某个条件来选择不同的类型。

  • fn extends (...args: any[]) => infer ReturnType这里检查 fn 是否可以赋值给一个函数类型,该函数接受任意参数(由 ...args: any[] 表示)并返回一个类型(由 infer ReturnType 表示)。infer 关键字是 Ts 的一个特性,允许我们在条件类型中推断类型。

  • 如果上述条件为真(即 fn 确实是一个函数类型),则 GetFunctionReturnType<fn> 的结果类型就是 ReturnType

  • 如果上述条件为假(即 fn 不是一个函数类型),则 GetFunctionReturnType<fn> 的结果是 nevernever 类型在 Ts 中表示一个永远不存在的值的类型。

戳我查看源码

2、构造器

构造器和函数差不多,唯一的区别就是构造器可以new一个新的实例

比如:构造器可以用interface声明

(1)提取构造器返回值

在这段代码中,我们定义了一个泛型类型参数 T,它约束为一个类构造函数,即可以接受任意参数并返回一个新创建的类实例的类型。

并通过条件提取,检查 T 是否满足前面定义的条件(即是否为一个类构造函数),

 如果 T 是一个类构造函数,那么 infer ReturnType 会推断出这个构造函数返回的类型,并赋值给 ReturnType。随后,整个条件类型的结果就是 ReturnType
如果 不是一个类构造函数,那么整个条件类型的结果就是 any

(2)提取构造器参数类型

  • T extends new (...args: infer Arguments) => any ? Arguments : never 是一个条件类型。它检查 T 是否满足 new (...args: infer Arguments) => any 的形式。
  • 如果满足,那么它会提取出 Arguments(使用 infer 关键字),并返回这个类型。
  • 如果不满足,它会返回 never 类型。

戳我查看源码

3、索引类型

我们可以通过条件提取 去获取到某一条索引的值类型

其实跟上面的都是一个逻辑,相信大家看到这里已经能够熟练使用 extends 配合infer做条件提取了。

戳我查看源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980360.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

聚观早报 | TCL召开电视新品发布会;OceanBase 4.3发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月22日消息 TCL召开电视新品发布会 OceanBase 4.3发布 科大讯飞推出耳背式助听器 F1联想中国大奖赛开赛 蔚来展…

引领4G拾音新时代:DuDuTalk双定向拾音设备上市,助力现场管理步入智能化

近日&#xff0c;继DuDuTalk的4G智能拾音工牌&#xff08;挂牌和胸牌&#xff09;之后&#xff0c;赛思云科技在线下沟通场景智能语音采集方案领域的又一突破性产品4G双定向桌面拾音终端全新上市。 该产品是面向营业网点、市政大厅、医疗诊室、售票窗口、贵宾室等环境的柜台服…

AD 21、22 软件安装教程

AD2022安装包链接 链接&#xff1a;https://pan.baidu.com/s/1oMNbXibQ1Zjl0RTLdPDVGw 提取码&#xff1a;xfs4 软件下载 1.以管理员身份运行 2. 3. 4. 5.路径最好改为C盘以外的&#xff0c;如D盘&#xff0c;要新建一个空文件夹 6. 7.下载好以后 8.在Crack文件夹下找…

全网最全的平行坐标图(parallel coordinates plot)的绘制攻略

早上起来拥抱太阳&#xff0c;写小论文&#xff0c;看到人家的图怎么那么好看&#xff01;&#xff01;&#xff1f;&#xff1f; 这不得赶紧抄下来&#xff0c;我也发一个顶刊&#xff1f;于是开始思考如何解决绘制这个问题&#xff0c;目前现有的大部分解决方案都是直接调库…

[负债学习]支线Python4.21

三的东西&#xff0c;一个是环境&#xff0c;一个是基础语法&#xff0c;第3个是代码的案例。 我们先从头开始讲一下计算机&#xff0c;它主要由4个部分组成cpu的中央处理器和一个储存和一个输出和出。而储存的话主要是由内存和外存而cpu&#xff0c;中央处理器全称叫做通用计…

Linux——进程基本概念下篇

Linux——进程基本概念下篇 文章目录 Linux——进程基本概念下篇一、环境变量1.1 环境变量的定义1.2 环境变量的相关命令1.3 命令行参数1.4 本地变量和环境变量1.5 常规命令和内建命令 二、进程地址空间2.1 地址空间的概念2.2 页表和MMU2.3 地址空间的作用2.4 地址空间的好处 一…

SpringBoot+Vue多模块项目宝塔部署(保姆级教程)

目录 服务器推荐 安装宝塔 进入宝塔 安装软件 安装 nginx ​编辑 安装mysql 安装java 配置数据库 启动模块下加打包插件 修改配置文件 添加java项目 放行端口 前端访问 本篇博文将向各位详细的介绍项目部署到服务器的详细过程&#xff0c;以及我配置过程中遇到的…

详细分析MySQL中的distinct函数(附Demo)

目录 前言1. 基本知识2. 基础Demo3. 进阶Demo 前言 该函数主要用于去重&#xff0c;对于细节知识&#xff0c;此文详细补充说明 1. 基本知识 DISTINCT 是一种用于查询结果中去除重复行的关键字 在查询数据库时&#xff0c;可能会得到重复的结果行&#xff0c;但有时只需要这…

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络&#xff0c; 2020)用于特征融合层。 官方论文地址&#xff1a;https://arxiv.org…

javaScript中的this 指向

this 指向总结 this 关键字是一个非常重要的语法点。 this 可以用在构造函数之中&#xff0c;表示实例对象。除此之外&#xff0c;this 还可以用在别的场合。但不管是什么场合&#xff0c;this 都有一个共同点&#xff1a;它总是返回一个对象。 关于 this 的指向&#xff0c…

研究发现:90%的Java服务容易第三方漏洞的影响

Datadog最新发布的“2024年DevSecOps状况”报告显示&#xff0c;Java服务在受Datadog最新发布的“2024年DevSecOps状况”报告显示&#xff0c;Java服务在受到第三方漏洞影响方面最为严重。 报告指出&#xff0c;90%的Java服务存在一个或多个严重或高危漏洞&#xff0c;这些漏…

uni打包ios应用

简单写了一个打开蓝牙的 配置一下manifest.json 打开蓝牙 进行云打包 准备好私钥&#xff08;私钥密码&#xff09;,profile点击打包> 出来一个.ipa文件 用数据线连上ios手机&#xff0c;直接安装到手机 如下&#xff1a; 关于密钥和profile文件的操作使用Appuploader生成…

unity 录制360全景渲染图

1.打开pakcageManager &#xff0c;选择packages为 unityRegisty&#xff0c;找到unityRecorder插件下载&#xff0c;点击右下角instant安装&#xff0c;如果插件列表为空&#xff0c;检查是否连接网络&#xff0c;重启Unity 2.打开录制面板 3.add recorder 选择ImageSequence …

使用文本到图像模型的一步图像翻译

使用文本到图像模型的一步图像翻译 摘要IntroductionRelated WorkMethod One-Step Image Translation with Text-to-Image Models 摘要 在这项工作中&#xff0c;作者解决了现有条件扩散模型的两个局限性&#xff1a;由于迭代去噪过程导致的推理速度慢以及模型微调对配对数据依…

TDSQL同一个所属Set显示3个备份节点

欢迎关注“数据库运维之道”公众号&#xff0c;一起学习数据库技术! 本期将为大家分享《TDSQL同一个所属Set显示3个备份节点》的处置案例。 关键词&#xff1a;分布式数据库、TDSQL、备份节点 1、问题描述 登录赤兔管理平台&#xff0c;单击左侧导航栏“实例管理/集群管理”…

【笔试强训】牛牛快递

链接&#xff1a;牛牛的快递_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/41b42e7b3c3547e3acf8e90c41d98270?tpId290&tqId39852&ru/exam/oj描述 牛牛正在寄快递&#xff0c;他了解到快递在 1kg 以内的按起步价 20 元计算&#xff0c;超出部分…

路由引入,路由过滤

拓扑图 1.配置IP地址&#xff0c;R1、R3、R4上使用loopback口模拟业务网段 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 100.1.1.1 24 [AR1-GigabitEthernet0/0/0]int l0 [AR1-LoopBack0]ip add 192.168.0.1 32 [AR1-LoopBack0]int l1 [AR1-LoopBack1]ip add 192.…

金三银四,备战数据结构与经典算法面试

随着春招季节的临近&#xff0c;面试备战成为许多求职者的痛点。如何在激烈的竞争中脱颖而出&#xff0c;成为众多求职者思考的问题。学习Python编程与算法内容&#xff0c;成为面试开发、测试开发等热门岗位的基础。 为了帮助大家更好地应对技术类面试挑战&#xff0c;霍格沃…

【office安装错误1402或1406】

office安装错误1402或1406 错误如图 解决方法 打开autoremove&#xff0c;点击扩展&#xff0c;输入1402&#xff0c;点击搜索 等待修复成功&#xff0c;再尝试安装office 软件每周六选择其他登录方式可以免费使用

初识C++ · 类和对象(中)(2)

前言&#xff1a;上篇文章已经介绍了6个默认成员函数中的3个函数&#xff0c;分别是构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;本文介绍的是后三个&#xff0c;赋值运算符重载&#xff0c;const成员函数&#xff0c;取地址操纵符重载。 目录​​​​​…