当前位置: 首页 > news >正文

21 # 高级类型:条件类型

条件类型(Conditional Types)是一种高级的类型工具,它允许我们基于一个类型关系来选择另一个类型。条件类型通常使用条件表达式 T extends U ? X : Y 的形式,其中根据泛型类型 T 是否可以赋值给类型 U 来确定最终的类型是 X 还是 Y。

type TypeName<T> = T extends string ? "string" :T extends number ? "number" :T extends boolean ? "boolean" :T extends undefined ? "undefined" :T extends Function ? "function" :"object";type T1 = TypeName<string>;  // string
type T2 = TypeName<string[]>; // "object"

分布式条件类型(Distributive Conditional Types)是一种特殊类型的条件类型,它在处理联合类型时会表现出特定的行为。当条件类型被应用于联合类型时,如果联合类型中包含了带有类型参数的条件类型,那么 TypeScript 会自动将条件类型“分发”到联合类型的每个成员上,并将结果组合成一个新的联合类型。

// (A | B) extends U ? X : Y
// (A extends U ? X : Y) | (B extends U ? X : Y)type T3 = TypeName<string | string[]>; // type T3 = "string" | "object"

可以实现过滤,比如 T 中过滤掉 U

// 官方的实现是 `Exclude<T, U>`
type Diff<T, U> = T extends U ? never : T;type T4 = Diff<"a" | "b" | "c", "a" | "e">; // "b" | "c"// Diff<"a", "a" | "e"> | Diff<"b", "a" | "e"> | Diff<"c", "a" | "e">
// never | "b" | "c"
// "b" | "c"

在做扩展,去掉 undefined 跟 null

// 官方的实现是 `NonNullable<T>`
type NotNull<T> = Diff<T, undefined | null>;type T5 = NotNull<string | number | undefined | null>; // type T5 = string | number

**Extract 跟 Exclude 相反, Exclude 是从类型 T 中过滤掉可以赋值给类型 U 的类型, Extract 是从类型 T 中可以抽取出赋值给 U 的类型
**

type T6 = Extract<"a" | "b" | "c", "a" | "e">; // type T6 = "a"

ReturnType<T> 用于获取函数类型 T 的返回类型

type T7 = ReturnType<() => string>; // type T7 = string

infer 用于推断并引入一个类型变量,以便在条件类型中使用。

/*** Obtain the return type of a function type*/
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

相关文章:

21 # 高级类型:条件类型

条件类型&#xff08;Conditional Types&#xff09;是一种高级的类型工具&#xff0c;它允许我们基于一个类型关系来选择另一个类型。条件类型通常使用条件表达式 T extends U ? X : Y 的形式&#xff0c;其中根据泛型类型 T 是否可以赋值给类型 U 来确定最终的类型是 X 还是…...

Java之List.steam().sorted(Comparator.comparing())排序异常解决方案

使用steam().sorted(Comparator.comparing())对List<T>集合里的String类型字段进行倒序排序&#xff0c;发现倒序失效。记录解决方案。 异常代码如下: customerVOList customerVOList.stream().sorted(Comparator.comparing(CustomerVOVO::getCustomerRate).reversed()…...

js判断对象是否有某个属性

前端判断后端接口是否返回某个字段的时候 <script>var obj { name: "John", age: 30 };console.log(obj.hasOwnProperty("name")); // 输出 trueconsole.log(obj.hasOwnProperty("email")); // 输出 falselet obj11 { name: "Joh…...

CleanMyMac X2024永久免费的强大的Mac清理工具

作为产品功能介绍专员&#xff0c;很高兴向您详细介绍CleanMyMac X这款强大的Mac清理工具。CleanMyMac X具有广泛的清理能力&#xff0c;支持多种文件类型的清理&#xff0c;让您的Mac始终保持最佳状态。 系统垃圾 CleanMyMac X能够深入系统内部&#xff0c;智能识别并清理各种…...

等保测评的知识

结合自己所学的知识和网络上的一些知识做个小总结。 目录 一、概念&#xff1a; 二、等级划分&#xff1a; 三、技术要求&#xff1a; 四、管理要求&#xff1a; 五、等保测评实施过程&#xff1a; 六、典型的网络架构&#xff1a; 一、概念&#xff1a; 全称为信息安全等级保…...

【算法】多路归并(鱼塘钓鱼)

有 N 个鱼塘排成一排&#xff0c;每个鱼塘中有一定数量的鱼&#xff0c;例如&#xff1a;N5 时&#xff0c;如下表&#xff1a; 鱼塘编号12345第1分钟能钓到的鱼的数量&#xff08;1..1000&#xff09;101420169每钓鱼1分钟钓鱼数的减少量&#xff08;1..100)24653当前鱼塘到下…...

unity3d Animal Controller的Animal组件中General基础部分理解

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…...

css背景从上到下颜色渐变、css背景从左到右颜色渐变、 css框线展示外阴影、css框线展示内阴影

1. css背景从上到下颜色渐变 body {background: linear-gradient(to bottom, #ff0000, #ffff00); /* 这里的#ff0000表示红色&#xff0c;#ffff00表示黄色 */ }2. css背景从左到右颜色渐变 要实现CSS背景从左到右的颜色渐变&#xff0c;可以使用linear-gradient函数。以下是一…...

Nacos学习笔记

Nacos官网 https://github.com/alibaba/nacos/releases https://www.bilibili.com/video/BV1q3411Z79z 1. Nacos介绍 Nacos是Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 在这个…...

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库&#xff0c;nodejs语言和IDEA以及微信开发者工具作为开发工具&#xff0c;这些技术和工具我在日常的作业中都经常的使用&#xff0c;并且因为对编程感兴趣&#xff0c;在闲暇时间也进行的进行编程的提高&#xff0c;所以在…...

trpc-go 博客系统

trpc-go 博客系统 使用go语言构建的全栈项目&#xff0c;充分利用了go的简洁性、高性能和并发处理能力。 系统采用了trpc-go框架和北极星进行分布式开发&#xff0c;展示了如何基于腾讯开源技术栈构建微服务架构&#xff0c;实现高效的服务通信和管理。 https://github.com/…...

【JAVA】Servlet开发

目录 HttpServlet HttpServletRequest HttpServletResponse 错误页面 设置网页自动刷新时间 构造重定向相应 js发起http请求 服务器端对js发起的http请求进行处理 前端获取后端数据&#xff0c;添加到当前页面的末尾&#xff0c;代码示例&#xff1a; 前后端交互&…...

k8s helm 删除 tiller

kuberneter 上面装了 helm 想卸载还并不是那么简单, 参考 stackoverflow 回复 kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l apphelm -o name|xargs kubectl dele…...

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…...

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…...

2024-3-18-C++day6作业

1>思维导图 2>试编程 要求: 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&a…...

【OceanBase诊断调优】—— 敏捷诊断工具obdiag一键分析OB集群日志设计与实践

最近总结一些诊断OCeanBase的一些经验&#xff0c;出一个【OceanBase诊断调优】专题&#xff0c;也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 obdiag定位为OceanBase敏捷诊断工具。1.2版本的obdiag支持诊断信息的一键收集&#xff0c;光有收集信息的能力&#xff0c;…...

python 调用redis创建查询key

部署redis apiVersion: apps/v1 # 描述api版本&#xff0c;默认都用这个 kind: Deployment # 资源类型&#xff0c;可以配置为pod&#xff0c;deployment&#xff0c;service&#xff0c;statefulset等等 metadata: # deployment相关的元数据&#xff0c;用于描述deployment的…...

归并排序思路

归并排序是一种经典的分治算法&#xff0c;其基本思路可以简述为以下几步&#xff1a; 分解&#xff1a;将待排序的数组递归地分解成较小的子数组&#xff0c;直到每个子数组只包含一个元素为止。这里采用分治的思想&#xff0c;将问题不断地划分为规模更小的子问题。 合并&am…...

【蓝桥杯选拔赛真题65】python输出三个字符 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python输出3个字符 一、题目要求 1、编程实现 2、输入输出...

K8S日志收集方案-EFK部署

EFK架构工作流程 部署说明 ECK (Elastic Cloud on Kubernetes)&#xff1a;2.7 Kubernetes&#xff1a;1.23.0 文件准备 crds.yaml 下载地址&#xff1a;https://download.elastic.co/downloads/eck/2.7.0/crds.yaml operator.yaml 下载地址&#xff1a;https://download.e…...

js基础语法大全(时间戳,uuid,字符串转json)

目录 一、获取时间戳二、获取uuid三、字符串转json格式 一、获取时间戳 var times Math.round(new Date().getTime()/1000).toString(); //获取 10位 时间戳 console.log(times);二、获取uuid function guid() {return xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.replace(/[xy]…...

uView LoadingIcon 加载动画

此组件为一个小动画&#xff0c;目前用在uView的loadMore加载更多等组件的正在加载状态场景。 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基本使用 通过mode设定动画的类型&#xff0c;circle为圆圈的形状&#xff0…...

Elasticsearch使用Kibana进行基础操作

一、Restful接口 Elasticsearch通过RESTful接口提供与其进行交互的方式。在ES中&#xff0c;提供了功能丰富的RESTful API的操作&#xff0c;包括CRUD、创建索引、删除索引等操作。你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上&#xff0c;你甚至可以使用 curl …...

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用教程

原文链接&#xff1a;“SRP模型”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597452&idx5&snf723d9e5858a269d00e15dbe2c7d3dc0&chksmfa823c6…...

【Windows 常用工具系列 15 -- VMWARE ubuntu 安装教程】

文章目录 安装教程镜像下载 工具安装 安装教程 安装教程参考链接&#xff1a;https://blog.csdn.net/Python_0011/article/details/131619864 https://linux.cn/article-15472-1.html 激活码 VMware 激活码连接&#xff1a;https://www.haozhuangji.com/xtjc/180037874.html…...

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…...

仿牛客项目Day8:社区核心功能2

显示评论 数据库 entity_type代表评论的目标类型&#xff0c;评论帖子和评论评论 entity_id代表评论的目标id&#xff0c;具体是哪个帖子/评论 targer_id代表评论指向哪个人 entity public class Comment {private int id;private int userId;private int entityType;priv…...

Vmware虚拟机配置虚拟网卡

背景 今天同事咨询了我一个关于虚拟机的问题&#xff0c;关于内网用Vmware安装的虚拟机&#xff0c;无法通过本机访问虚拟上的Jenkins的服务。   验证多次后发现有如下几方面问题。 Jenkins程序包和JDK版本不兼容&#xff08;JDK1.8对应Jenkins不要超过2.3.57&#xff09;虚…...

双向链表代码(带哨兵位循环/不带哨兵位不循环

以下代码全为本人所写&#xff0c;如有错误&#xff0c;很正常&#xff0c;还请指出&#xff0c; 目录 带哨兵位循环 test.c DLList.c DLList.h 不带哨兵位不循环 test.c DLList.c DLList.h 带哨兵位循环 test.c #define _CRT_SECURE_NO_WARNINGS#include"DLlist.h&…...

wordpress美化导航菜单/手机端关键词排名优化软件

事务的四个隔离级别分别是&#xff1a;1、读取未提交内容(Read Uncommitted)&#xff1b;2、读取提交内容(Read Committed)&#xff1b;3、可重读(Repeatable Read)&#xff1b;4、可串行化(Serializable)。(推荐学习&#xff1a;mysql教程)一、Read Uncommitted -- 读取未提交…...

给公司网站做seo/软文推广500字

当下有很多图片加载框架&#xff0c;常见的有Glide、Fresco、Picasso等。Glide因为其体积小、缓存机制强大等优点&#xff0c;受到了广大程序员的青睐&#xff1b;Fresco虽然体积比较大&#xff0c;缓存机制也没有Glide强大&#xff0c;但它胜在拥有一些炫酷的效果&#xff08;…...

iis做的网站手机怎么访问/怎么创造自己的网站

UDP是用户数据报协议&#xff08;User Datagram Protocol&#xff0c;UDP&#xff09;的简称&#xff0c;其主要作用是将网络数据流量压缩成数据报形式&#xff0c;提供面向事务的简单信息传送服务。与TCP协议不同&#xff0c;UDP协议直接利用IP协议进行UDP数据报的传输&#x…...

沭阳网站开发/沈阳专业网站seo推广

作为一名项目施工人员&#xff0c;抚琴煮酒前前后后也实施过一些大大小小的项目了&#xff0c;有并发量大的CDN广告网站&#xff0c;还有证券类资讯网站以及电子商务网站等&#xff0c;还有就是一些并发不大但要求作成HA的小型网站等&#xff0c;感觉其实在实施过程还是有蛮多技…...

新华网/自动优化app

Overview我个人比较喜欢Ubuntu系统&#xff0c;可是该死的桌面环境有的时候总卡死。无论怎么按都没用。也不能总是按关机按钮吧。于是&#xff0c;我有了下面的想法。杀死进程ubuntu下的xorg软件包是包括显卡驱动、图形环境库等等一系列软件包&#xff0c;我想我把它的进程杀掉…...

电子商务网站建设与全程实例/网店推广方式

Apache2的安装 1.执行&#xff1a;sudo apt-get install apache2。 2.sudo vim /etc/apache2/apache2.conf在最后加上&#xff1a;ServerName localhost。 3.sudo /etc/init.d/apache2 start启动apache服务。 4.启动浏览器&#xff0c;并输入http://localhost即可看到安装成功界…...