函数形状有几种定义方式;操作符infer的作用

2023-10-05 21:16

本文主要是介绍函数形状有几种定义方式;操作符infer的作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 TypeScript 中,函数形状可以用多种方式进行定义。下面介绍了几种常用的函数形状定义方式:

  1. 函数声明:

  • function add(a: number, b: number): number {return a + b;
    }
    

    在函数声明中,我们直接使用 function 关键字来声明函数,并指定参数的类型和返回值的类型。

  • 函数表达式:

  • const subtract = function(a: number, b: number): number {return a - b;
    };
    

    使用函数表达式的方式,我们将一个匿名函数赋值给一个变量。在这种情况下,可以通过变量的类型推断来推导参数和返回值的类型,当然也可以显式地指定类型。

  • 箭头函数:

  • const multiply = (a: number, b: number): number => a * b;
    

    箭头函数是一种更简洁的函数表达式形式,通过箭头 => 分隔参数和函数体,并且可以省略 function 关键字和 return 关键字(当函数体只有一条返回语句时)。

  • 函数类型别名:

  1. type Calculator = (a: number, b: number) => number;const divide: Calculator = (a, b) => a / b;
    

    我们可以使用类型别名来定义一个函数类型,将参数类型和返回值类型组合在一起。然后可以使用类型别名来声明具体的函数。

总结起来,函数形状可以通过函数声明、函数表达式、箭头函数和函数类型别名等方式进行定义。每种方式都有其自身的特点和适用场景,选择合适的方式取决于具体的需求和编码风格。

infer 是 TypeScript 中的一个关键字,它用于从类型中推断(infer)出其他类型。

在条件类型(Conditional Types)中,我们可以使用 infer 来引入一个类型参数,并根据条件对该类型参数进行推断。具体来说,infer 用于提取并推断出某个表达式中的类型,并将其作为新的类型参数使用。

下面是一个示例,展示了 infer 的使用:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;function add(a: number, b: number): number {return a + b;
}type AddReturnType = ReturnType<typeof add>; // 推断出 add 函数的返回值类型console.log(typeof add); // function
console.log(typeof AddReturnType); // number

在上述示例中,我们定义了一个 ReturnType<T> 类型,它接受一个泛型参数 T,表示函数类型。通过使用条件类型和 infer R,我们在条件中判断 T 是否满足函数类型的要求。如果满足条件,那么 R 将被推断为函数的返回值类型。最终,ReturnType<T> 类型将被定义为函数的返回值类型。

通过调用 typeof 运算符,我们可以看到 add 的类型为 function,而 AddReturnType 的类型为 number,这是因为 ReturnType<typeof add> 推断出了 add 函数的返回值类型。

总结起来,infer 关键字在 TypeScript 中用于从类型中推断出其他类型,主要用于条件类型中。它允许我们在条件类型中提取和使用表达式中的类型,并将其作为新的类型参数

这篇关于函数形状有几种定义方式;操作符infer的作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152062

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流