当前位置: 首页 > 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],获取了函数数组中每个函数的返回值类型

http://www.lryc.cn/news/482800.html

相关文章:

  • Hadoop + Hive + Apache Ranger 源码编译记录
  • Java从入门到精通笔记篇(十二)
  • 入侵排查之Linux
  • 从0开始学习Linux——文件管理
  • 全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
  • Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
  • 安当ASP系统:适合中小企业的轻量级Radius认证服务器
  • Vue 组件间传值指南:Vue 组件通信的七种方法
  • 推荐一个超漂亮ui的网页应用设计
  • 有什么初学算法的书籍推荐?
  • 自动化工作流建设指南
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • SNK施努卡 - 机器人测温取样系统
  • goframe开发一个企业网站 验证码17
  • 【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
  • MySQL电商多级分类表设计方案对比
  • 网络安全工程师需要知道哪些IPSec的基本原理?
  • leetcode 148. 排序链表 中等
  • 动态规划与贪心算法:核心区别与实例分析
  • .NET 公共语言运行时(Common Language Runtime,CLR)
  • SpringBoot使用TraceId日志链路追踪
  • YOLO11 旋转目标检测 | OBB定向检测 | ONNX模型推理 | 旋转NMS
  • PCL 点云拟合 拟合空间直线
  • 我的创作纪念日-20241112-感谢困难
  • 苍穹外卖05-Redis相关知识点
  • unity 玩家和炸弹切线计算方式
  • 【MySQL】MySQL中的函数之REGEXP_LIKE
  • 跟着尚硅谷学vue2—进阶版4.0—Vuex1.0
  • 深度学习服务器租赁AutoDL
  • excel常用技能