TypeScript 从入门到进阶之基础篇(八)函数篇

在这里插入图片描述

系列文章目录

TypeScript 从入门到进阶系列

  1. TypeScript 从入门到进阶之基础篇(一) ts基础类型篇
  2. TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇
  3. TypeScript 从入门到进阶之基础篇(三) 元组类型篇
  4. TypeScript 从入门到进阶之基础篇(四) symbol类型篇
  5. TypeScript 从入门到进阶之基础篇(五) 枚举类型篇
  6. TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型 篇
  7. TypeScript 从入门到进阶之基础篇(七)泛型篇
    持续更新中…

文章目录

  • 系列文章目录
  • TypeScript 从入门到进阶系列
  • 前言
  • 一、函数类型的使用
    • 1、直接定义函数
    • 2、使用接口定义函数
    • 3、类型别名定义函数
    • 4、函数中可选参数定义
    • 5、函数中默认参数定义
    • 5、函数中剩余参数定义
    • 6、函数中函数重载定义
  • 函数使用总结


前言

函数是一种可重复使用的代码块,是构建应用的一块基石。在本章我们将学习TypeScript 中如何定义函数。
在JavaScript中,函数可以被定义、调用和传递给其他函数作为参数。函数可以用来组织代码,使其更加模块化和可读性,同时也提供了代码的重用性和灵活性。


一、函数类型的使用

1、直接定义函数

在TypeScript 使用函数的方法是直接定义函数所需参数的类型,也是最基本的用法

function myFunctionType (data1:string,data2:string):string {
	return data1+data2;
}
//箭头函数写法
const myFunctionType = (data1:string,data2:string ):string =>{
	return data1+data2;
}

需要注意的是 但我们的函数没有返回值时 ,就不能定义这个函数的返回值类型 (void除外)

//正确写法
function myFunctionType (data:string) {
	console.log (data) 
}
//正确写法2
function myFunctionType (data:string) :void {
	console.log (data) 
}
//错误写法 没有返回值的时后不要写 或者写void
function myFunctionType (data:string) :number{
	console.log (data) 
}

2、使用接口定义函数

上面是直接定义函数 ,同时 接口也可以用来定义函数 具体用法如下

//使用接口定义函数
interface MyFunctionType {
  (x: string, y: string): string;
}
const myFunction:MyFunctionType=(x,y)=>{
}

3、类型别名定义函数

类型别名的方式来定义函数会更加明显

type MyFunctionType = (a: number, b: number) => number;

const sum: MyFunctionType = (a, b) => {
  return a + b;
};

4、函数中可选参数定义

在函数的使用中,可能会遇到 传参时有些参数非必传的,具体用法如下

function myFunctionType (data1:string,data2?:string):string {
	return data1+data2?data2:'';
}

const myFunctionType = (data1:string,data2?:string ):string =>{
	return data1+data2?data2:'';
}

interface MyFunctionType {
  (data1: string, data2?: string): string;
}

const myFunction:MyFunctionType=(data1,data2)=>{
	return data1+data2?data2:'';
}

5、函数中默认参数定义

在 TypeScript 函数中,可以通过在参数的后面使用 = 来定义默认参数。

function greet(name: string, greeting: string = "Hello") {
  console.log(`${greeting}, ${name}!`);
}

greet("Alice"); // 输出:Hello, Alice!
greet("Bob", "Hi"); // 输出:Hi, Bob!

在上面的例子中,greeting 参数被定义为默认参数,它的默认值为 "Hello"。当我们调用 greet 函数时,如果不提供 greeting 参数的值,那么它将使用默认值 "Hello"。如果提供了 greeting 参数的值,则使用提供的值。

5、函数中剩余参数定义

剩余参数的定义是指在函数的参数列表中,使用三个点(…)来表示,可以接收任意数量的传入参数,并将这些参数存储为一个数组。剩余参数在函数内部以数组的形式进行操作。

function sum(...numbers: number[]): number {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3)); // 输出 6
console.log(sum(10, 20, 30, 40)); // 输出 100

在上述例子中,函数 sum 使用剩余参数 ...numbers 来接收传入的任意数量的数字参数,并将这些参数存储为一个数组 numbers。函数的实现中,我们使用 reduce 方法对数组中的所有元素进行求和,并返回求和结果。在调用函数时,我们可以传入任意数量的参数,它们会被作为一个数组传递给剩余参数。

6、函数中函数重载定义

在TypeScript中,函数重载是指为同一个名称的函数提供多个不同的函数类型定义。通过函数重载,可以根据参数的类型和个数的不同来决定函数的行为。

函数重载的定义方式如下:

function 函数名(参数1: 类型1): 返回值类型;
function 函数名(参数1: 类型1, 参数2: 类型2): 返回值类型;
function 函数名(参数1: 类型1, 参数2: 类型2, 参数3: 类型3): 返回值类型;
// ...

其中,函数名必须相同,但参数的类型和个数可以不同。每个函数定义都要指定参数的类型和返回值的类型。

TypeScript在编译时会根据参数的类型和个数来选择正确的函数定义。如果没有找到匹配的函数定义,会报错。

下面是一个简单的示例:

function foo(x: number): string;
function foo(x: string): number;
function foo(x: any): any {
  if (typeof x === 'number') {
    return x.toString();
  } else if (typeof x === 'string') {
    return parseInt(x);
  }
}

console.log(foo(123)); // 输出 "123"
console.log(foo('456')); // 输出 456

在这个例子中,foo函数有两个重载:一个接受number类型的参数并返回string类型,另一个接受string类型的参数并返回number类型。根据传入的参数类型,TypeScript会自动选择正确的函数定义。

函数使用总结

  1. 定义函数:
    使用function关键字定义函数,可以指定参数类型和返回值类型。
    使用箭头函数(=>)定义函数,也可以指定参数类型和返回值类型。

  2. 函数参数:
    可以指定参数的类型,可以是基本类型(如string、number等)或自定义类型。
    参数可以设置默认值,使用?来指定可选参数。
    可以使用剩余参数(rest parameters)来接收不定数量的参数。

  3. 函数返回值:
    可以指定函数的返回值类型,可以是基本类型或自定义类型。
    可以使用void表示函数没有返回值。
    可以使用泛型(Generics)来指定函数的返回值类型。

  4. 函数重载:
    TS支持函数重载,即在函数定义时可以为同一个函数定义多个函数类型的签名。
    函数重载的目的是为了增加函数的灵活性,可以根据不同的参数类型和个数调用不同的函数实现。

  5. 函数类型:
    可以使用类型别名(type alias)或接口(interface)来定义函数类型。
    可以将函数类型作为参数类型或返回值类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装elasticsearch、kibana、cerebro、logstash

安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…

ClickHouse基础知识(七):ClickHouse的分片集群

副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量数据,对数据的横向扩容没有解决。 要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切 分,不同的分片分布到…

Vue知识总结-中

VUE-生命周期 生命周期概述 生命周期也常常被称为生命周期回调函数/生命周期函数/生命周期钩子生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数生命周期函数的名字不能更改,但函数的具体内容是由我们程序员自己编写的生命周期函数中的this指向是vm或组件实例对象 生命周…

【Flutter 开发实战】Dart 基础篇:从了解背景开始

想要学会用 Flutter 开发 App,就不可避免的要学习另一门很有意思的编程语言 —— Dart。很多小伙伴可能在学习 Flutter 之前可能都没听说过这门编程语言,我也是一样,还以为 Dart 是为了 Flutter 而诞生的;然而,当我们去…

【嵌入式】Makefile 学习笔记记录 | 嵌入式Linux

文章目录 前言一、Makefile的引入——最简单的gcc编译过程二、Makefile的规则三、Makefile的语法3.1、通配符3.2、假想目标 .phony3.3、即时变量 延时变量 四、Makefile的函数4.1、foreach4.2、filter4.3、wildcard4.4、patsubst 五、Makefile升级5.1、包含头文件在内的依赖关系…

Force Yc 第六引导公告网页源码

Force Yc 第六引导公告网页源码,HTML源码,本地双击index.html即可运行,内容体积小,美观大气,二次元风格,喜欢的朋友可以拿去研究 蓝奏云:https://wfr.lanzout.com/iZsjv1kexkod

西电期末1035.可构造三角形个数

一.题目 二.分析与思路 依旧是遍历判断&#xff0c;三角形任意两边之和大于第三边&#xff0c;读题&#xff01;&#xff01;&#xff01;&#xff1a;连续的三个数&#xff01;&#xff01;&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int …

机器视觉篇

1&#xff1a;实现LCD显示文字 实验名称&#xff1a;LCD 版本&#xff1a; v1.0 日期&#xff1a; 2022.12 作者&#xff1a; 01Studio 说明&#xff1a;编程实现LCD显示信息。需要将01Studio.bmp文件发送到开发板 import lcd,image,utimelcd.init() #初始化LCD lcd.clear(lcd…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第五天-Linux消息共享内存练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

案例介绍|钡铼助力2023年全国职业院校技能大赛工业网络智能控制与维护赛项

如今&#xff0c;越来越多的企业开始意识到数字制造和工业物联网已经成为工业自动化中大规模生产的核心驱动力。这其中&#xff0c;工业网络作为基础设施&#xff0c;是实现工厂设备联网与数据采集&#xff0c;建设数字工厂的基础和前提&#xff0c;甚至成为关乎数字工厂能否真…

【动态规划】C++算法312 戳气球

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode312 戳气球 有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&…

PIG框架学习2——资源服务器的配置详解

一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的&#xff0c;其他模块需要进行token鉴权的&#xff0c;需要在微服务中引入pigx-common-security模块的依赖&#xff0c;从而间接引入相关的Spring security oauth2依赖…

环境中碳循环

含碳的物质有CO2、CO、CH4、糖类、脂肪和蛋白质等&#xff0c;碳循环以CO2为中心&#xff0c;CO2被植物、藻类利用进行光合作用&#xff0c;合成植物性碳&#xff1b;动物摄食植物就将植物性碳转化为动物性碳&#xff1b;动物和人呼吸放出CO2&#xff0c;有机碳化合物被厌氧微生…

nodejs安装、nodejs环境变量配置、npm安装、vue安装

官网下载链接:https://nodejs.org/en/download/ 个人下载版本&#xff1a;node-v20.10.0-x64.msi&#xff0c;下载完成后&#xff0c;点击安装&#xff0c;除了更换安装目录&#xff0c;其他直接下一步即可 安装完成后执行&#xff1a;npm -v 下面开始配置环境变量&#xf…

Spring应用的部署与管理

一、前言 部署是将开发好的应用发布到服务器上&#xff0c;使其能够被用户访问的关键步骤。Spring框架提供了灵活的部署选项&#xff0c;本文将介绍Spring应用的常见部署方式和一些建议&#xff0c;帮助开发者顺利将应用投放到生产环境。 二、传统部署方式&#xff1a;WAR包 传…

Github 2024-01-08开源项目周报 Top14

根据Github Trendings的统计&#xff0c;本周(2024-01-08统计)共有14个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5TypeScript项目3C项目2Dart项目1QML项目1Go项目1Shell项目1Rust项目1JavaScript项目1C#项目1 免费…

【一】使用vue-cli创建vue3的helloworld项目

不再推荐使用vue-cli命令创建vue3的项目&#xff0c;vue-cli 是 Vue 早期推出的一款脚手架&#xff0c;使用 webpack 创建 Vue 项目。后期推荐使用 create-vue&#xff0c;create-vue 是 Vue3 的专用脚手架&#xff0c;使用 vite 创建 Vue3 的项目(关注【二】使用create-vue创建…

XML技术分析05

一、DOM 使用DOM扫描器程序&#xff1a;DOM扫描器是一种非常通用的程序&#xff0c;它不需知道用户定制的XML标记的确切含义。DOMAPI具有某些能把任何数据存储到树形结构中的接口。扫描器具有一组实现了这些接口的类&#xff0c;可以实例化这些类的对象。 这些接口和类…

GEE数据集——Cloud Score+ S2_HARMONIZED数据集

简介 Cloud Score 是一种用于中高分辨率光学卫星图像的质量评估&#xff08;QA&#xff09;处理器。Cloud Score S2_HARMONIZED数据集是由统一的哨兵-2 L1C数据集制作的&#xff0c;Cloud Score的输出可用于识别相对清晰的像素&#xff0c;并有效去除L1C&#xff08;大气顶部&…

2024.1.3力扣每日一题——从链表中移除节点

2024.1.3 题目来源我的题解方法一 递归方法二 栈方法三 反转链表方法四 单调栈头插法 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2487 我的题解 方法一 递归 当前节点对其右侧节点是否删除无影响&#xff0c;因此可以对其右侧节点进行递归移除。 若当前节点为空&am…