ts 中 ReturnType 作用
`ReturnType` 用于获取函数的返回值类型。
一、基本概念和语法
1. 定义和语法结构
`ReturnType`是一个泛型类型,其语法为`ReturnType<T>`,其中`T`是一个函数类型。例如,如果有一个函数`add`,`ReturnType<typeof add>`就可以获取`add`函数的返回值类型。
2. 简单示例
function getFullName(firstName: string, lastName: string): string {return firstName + " " + lastName;}```使用`ReturnType`来获取这个函数的返回值类型```typescripttype FullNameReturnType = ReturnType<typeof getFullName>;// FullNameReturnType的类型为string
二、在函数式编程和类型推导中的应用
1. 函数式编程中的作用
1.1 组合函数类型检查
例如:假设有两个函数`f`和`g`,`f`的返回值作为`g`的输入,通过`ReturnType`可以精确地定义它们之间的类型关系。
function f(x: number): string {return x.toString();}function g(y: string): boolean {return y.length > 0;}type IntermediateType = ReturnType<typeof f>;// IntermediateType的类型为string,与g函数的输入类型一致,确保了类型安全的函数组合
1.2 高阶函数类型定义
例如:一个高阶函数`createAdder`,它返回一个将输入数字加上一个固定数字的函数:
function createAdder(n: number): (x: number) => number {return function (x: number) {return x + n;};}type AdderFunctionReturnType = ReturnType<typeof createAdder>;// AdderFunctionReturnType的类型为(x: number) => number,准确地定义了createAdder函数返回的函数类型
2. 类型推导和泛型约束
2.1 泛型函数类型推导
例如:有一个泛型函数`processData`,它接受一个函数作为参数,并对该函数的返回值进行处理
function processData<T, R extends ReturnType<T>>(func: T, data: R): R {// 对func的返回值(类型为R)进行处理return func(data);}function double(x: number): number {return x * 2;}const result = processData(double, 5);// result的类型为number,因为double函数的返回值类型为number,通过ReturnType推导了R的类型为number
2.2 复杂类型结构中的推导
例如:一个包含多个操作函数的对象
interface MathOperations {add: (a: number, b: number) => number;multiply: (a: number, b: number) => number;}type AddReturnType = ReturnType<MathOperations["add"]>;// AddReturnType的类型为number,准确地获取了add函数的返回值类型
三、与其他类型操作符的结合使用
1. 结合条件类型
1.1 根据返回值类型进行条件判断
例如:我们可以创建一个类型,根据函数是否返回`null`来决定最终的类型:
type NonNullableReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => null? never: ReturnType<T>;function returnsNull(): null {return null;}function returnsString(): string {return "Hello";}type NonNullableReturn1 = NonNullableReturnType<typeof returnsNull>;// NonNullableReturn1的类型为never,因为returnsNull函数返回nulltype NonNullableReturn2 = NonNullableReturnType<typeof returnsString>;// NonNullableReturn2的类型为string,因为returnsString函数返回string
2. 与映射类型一起使用
2.1 处理函数数组的返回值类型
例如:有一个函数数组
const functionsArray: [() => number, () => string] = [() => 5, () => "World"];type FunctionArrayReturnTypes = {[K in keyof typeof functionsArray]: ReturnType<(typeof functionsArray)[K]>;};// FunctionArrayReturnTypes的类型为[number, string],获取了函数数组中每个函数的返回值类型
相关文章:
ts 中 ReturnType 作用
ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型,其语法为ReturnType<T>,其中T是一个函数类型。例如,如果有一个函数add,ReturnType<typeof add>就可以获取…...
Hadoop + Hive + Apache Ranger 源码编译记录
背景介绍 由于 CDH(Clouderas Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。 组件…...
Java从入门到精通笔记篇(十二)
枚举类型与泛型 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...
入侵排查之Linux
目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...
从0开始学习Linux——文件管理
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...
全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新(black duck) 现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运…...
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...
安当ASP系统:适合中小企业的轻量级Radius认证服务器
安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…...
Vue 组件间传值指南:Vue 组件通信的七种方法
前言 Vue 的组件系统非常强大,允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加,组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法,并结合实际代码示例,帮助您更…...
推荐一个超漂亮ui的网页应用设计
https://andi.cn/download/65211.html...
有什么初学算法的书籍推荐?
对于初学算法的读者,以下是一些值得推荐的书籍: 1、算法超简单:趣味游戏带你轻松入门与实践 作者:童晶 著 推荐理由:本书把趣味游戏应用于算法教学,提升读者的学习兴趣,并通过可视化的图解和动…...
自动化工作流建设指南
🚀 自动化工作流建设指南:CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流,提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 📑 目录 CI/CD 最佳实践…...
[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue3校园宿舍管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...
SNK施努卡 - 机器人测温取样系统
机械手测温取样系统 有色行业自动化 机器人:机械手测温取样系统是以工业机器人为平台,技术相对成熟稳定,利用机器人的灵活性,自动往测温取样枪上安装探头,自动将探头伸进高温铜水内进行测温取样,自动拆除废…...
goframe开发一个企业网站 验证码17
Go验证码功能实现详解 目录结构 ├── internal │ ├── controller │ │ └── captcha │ │ └── captcha.go │ ├── logic │ │ └── captcha │ │ └── captcha.go │ └── service │ └── captcha.go1. Serv…...
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …...
MySQL电商多级分类表设计方案对比
MySQL电商多级分类表设计方案对比 在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据&…...
网络安全工程师需要知道哪些IPSec的基本原理?
IPSec是一种端到端的安全协议,为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能,确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域,是保护互联网通信安全的重要手段。 …...
leetcode 148. 排序链表 中等
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: …...
动态规划与贪心算法:核心区别与实例分析
动态规划与贪心算法:核心区别与实例分析 动态规划和贪心算法是计算机科学中用于解决优化问题的两种著名方法。它们各自的思路和应用场景有显著的区别,理解这些区别对解决相关问题至关重要。本文将详细探讨这两种算法的最优子结构、解法策略、适用场景&a…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
