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

2023-10-05 18:04

本文主要是介绍函数形状有几种定义方式;操作符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/151754

相关文章

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte