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

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是一个泛型类型&#xff0c;其语法为ReturnType<T>&#xff0c;其中T是一个函数类型。例如&#xff0c;如果有一个函数add&#xff0c;ReturnType<typeof add>就可以获取…...

Hadoop + Hive + Apache Ranger 源码编译记录

背景介绍 由于 CDH&#xff08;Clouderas Distribution Hadoop &#xff09;近几年已经开始收费并限制节点数量和版本升级&#xff0c;最近使用开源的 hadoop 搭了一套测试集群&#xff0c;其中的权限管理组件用到了Apache Ranger&#xff0c;所以记录一下编译打包过程。 组件…...

Java从入门到精通笔记篇(十二)

枚举类型与泛型 枚举类型可以取代以往常量的定义方式&#xff0c;即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法&#xff0c;该方法将枚举中所有的枚举值以数组的形式返回。 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——文件管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...

全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程

一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新&#xff08;black duck&#xff09; 现在很多云、云服务器都是由开源的组件去搭成的&#xff0c;对于OpenSource组件应该去做一些安全检查和版本更新&#xff0c;尤其是版本管理&#xff0c;定期对在运…...

Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装

Leidenアルゴリズムの詳細解説&#xff1a;Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP&#xff08;Authentication Service Platform&#xff09;身份认证系统是一款功能强大的身份认证服务平台&#xff0c;特别适用于中小企业。其中&#xff0c;简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍&#xff1a; 一、主要…...

Vue 组件间传值指南:Vue 组件通信的七种方法

前言 Vue 的组件系统非常强大&#xff0c;允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加&#xff0c;组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法&#xff0c;并结合实际代码示例&#xff0c;帮助您更…...

推荐一个超漂亮ui的网页应用设计

https://andi.cn/download/65211.html...

有什么初学算法的书籍推荐?

对于初学算法的读者&#xff0c;以下是一些值得推荐的书籍&#xff1a; 1、算法超简单&#xff1a;趣味游戏带你轻松入门与实践 作者&#xff1a;童晶 著 推荐理由&#xff1a;本书把趣味游戏应用于算法教学&#xff0c;提升读者的学习兴趣&#xff0c;并通过可视化的图解和动…...

自动化工作流建设指南

&#x1f680; 自动化工作流建设指南&#xff1a;CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流&#xff0c;提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 &#x1f4d1; 目录 CI/CD 最佳实践…...

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue3校园宿舍管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...

SNK施努卡 - 机器人测温取样系统

机械手测温取样系统 有色行业自动化 机器人&#xff1a;机械手测温取样系统是以工业机器人为平台&#xff0c;技术相对成熟稳定&#xff0c;利用机器人的灵活性&#xff0c;自动往测温取样枪上安装探头&#xff0c;自动将探头伸进高温铜水内进行测温取样&#xff0c;自动拆除废…...

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电商多级分类表设计方案对比 在电商系统中&#xff0c;多级分类是一个常见的需求&#xff0c;用于组织和管理商品类别&#xff0c;合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案&#xff0c;我们将使用宠物分类作为示例数据&…...

网络安全工程师需要知道哪些IPSec的基本原理?

IPSec是一种端到端的安全协议&#xff0c;为IP数据包提供认证、完整性和加密服务。它通过在IP层实现安全功能&#xff0c;确保数据在传输过程中的机密性、完整性和真实性。IPSec广泛应用于VPN、远程访问和企业内部网络通信等领域&#xff0c;是保护互联网通信安全的重要手段。 …...

leetcode 148. 排序链表 中等

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#xff1a; …...

动态规划与贪心算法:核心区别与实例分析

动态规划与贪心算法&#xff1a;核心区别与实例分析 动态规划和贪心算法是计算机科学中用于解决优化问题的两种著名方法。它们各自的思路和应用场景有显著的区别&#xff0c;理解这些区别对解决相关问题至关重要。本文将详细探讨这两种算法的最优子结构、解法策略、适用场景&a…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...