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的类型为number2.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函数返回string2. 与映射类型一起使用
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…...
 
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
 
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
 
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
 
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
 
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
 
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
 
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
