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)来定义函数类型。
    可以将函数类型作为参数类型或返回值类型。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open CASCADE学习|Draw Harness

目录 显示长方体 提供帮助信息 执行文件 记录交互式命令 使用getsourcefile可以快速查找到Tcl命令对应的C源文件 在Tcl中内置了一些变量,并赋予了一定的功能。内置变量列表如下: 退出 加载插件 在屏幕显示变量 返回绘图变量信息 视图 mu, md…

【Spring实战】25 Spring Boot Admin 应用

文章目录 1. 查看健康信息2. 使用 Micrometer 和 "/metrics"3. 管理包和类的日志级别4. 其他功能总结 Spring Boot Admin 是一个功能强大的工具,用于监控和管理多个 Spring Boot 应用程序。通过上一篇文章 【Spring实战】24 使用 Spring Boot Admin 管理…

equals()与hashCode()方法详解

java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法。 回到…

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

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

2024龙年艺术字矢量Ai设计文件60套

2024新年将至,设计师们早已开始为龙年海报、推文的制作摩拳擦掌。该合集不仅内容丰富多样,作为矢量文件资源,也能够让设计者更为轻松地编辑与创作。 合集内另附200多张电脑壁纸。 文件总大小368MB 链接:https://pan.quark.cn/s/0caab4cf065…

电商API-获取拼多多商品详情数据精准价格API测试示例

pinduoduo.item_get_app_pro获取拼多多商品详情数据 如何获取apikey? 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中&#xff…

【Leetcode】移除后集合的最多元素数

目录 💡题目描述 💡思路 💡总结 100150. 移除后集合的最多元素数 💡题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,它们的长度都是偶数 n 。 你必须从 nums1 中移除 n / 2 个元素,同时从 …

Centos 配置 DNS 服务器

在连网的情况下,安装 DNS 服务器,使用命令: yum install bind 安装完成过后,关闭 DNS 服务器防火墙命令: systemctl stop firewalld 在 “ # ” 输入命令: gedit /etc/named.conf 进入过后将 listen…

Docker给容器添加新端口映射

Docker容器添加新端口映射 查看运行的容器 docker ps查看容器挂载目录 docker inspect [容器id]我这里是[容器name] 停止容器 docker stop pythonWarning: Stopping docker.service, but it can still be activated by: docker.socket 停止docker服务 systemctl stop dock…

网络安全—SSL安全访问应用

文章目录 网络拓扑部署CA服务器颁发证书开启Web服务安装IIS服务修改Web默认网页 申请Web证书前提准备申请文件生成申请web证书开始安装web证书 客户机访问web默认网站使用HTTP使用HTTPS 为客户机安装浏览器证书 环境:Windows Server 2003 网络拓扑 这里使用NAT还是…

x64dbg的基本使用

目录 x64dbg简介 术语 打开程序 x64dbg打开界面介绍 汇编窗口 内存窗口 寄存器窗口 堆栈窗口 基本调试方法 搜索字符串 退出程序 x64dbg简介 x64dbg是软件逆向里必不可少的动态调试工具,本来考虑学习一下OD,但是考虑到OD很久之前就已经停止维…

ArcGIS制图技巧总结

Part 1 制图综述 1.1 制图的目的 随着GIS在各行各业的深入应用,各信息化部门和生产单位都逐渐建立起自己的GIS的应用,同时积累了大量的地理数据。随着应用深度和广度的推进,针对数据建立专题应用越来越迫切,对行业专题制图的需…

2024拜年祝福视频AE模板31套

做短视频必备的AE模板非常好看,跨年做个视频非常漂亮,喜欢的赶紧保存吧! 链接:https://pan.quark.cn/s/fc1f3db12049

XML技术分析03

一、XMLHttpRequest 对象 XMLHttpRequest 对象用于在后台与服务器交换数据。 创建 XMLHttpRequest 对象 所有现代浏览器 (IE7、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。 通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpReq…

09.简单工厂模式与工厂方法模式

道生一,一生二,二生三,三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动,我们在感慨SU7充满土豪气息的保时捷设计的同时,也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

uniapp 解决安卓App使用uni.requestPayment实现沙箱环境支付宝支付报错

背景:uniapp与Java实现的安卓端app支付宝支付,本想先在沙箱测试环境测支付,但一直提示“商家订单参数异常,请重新发起付款。”,接着报错信息就是:{ "errMsg": "requestPayment:fail [pa…

【书生大模型00--开源体系介绍】

书生大模型开源体系介绍 0 通用人工智能1 InternLM性能及模型2 从模型到应用 大模型成为目前很热的关键词,最热门的研究方向,热门的应用;ChatGPT的横空出世所引爆,快速被人们上手应用到各领域; 0 通用人工智能 相信使…

[蓝桥杯学习] 线段树

学习blibli 定义 线段树是一种特殊的平衡二叉查找树,使用线段树,可以实现数据的添加、查找和删除。 树的根结点表示了一个完整的单元区间,左右孩子的区间是将父结点的区间进行二分,左右孩子的区间之和,就是他们的根…

【机器学习】循环神经网络(四)-应用

五、应用-语音识别 5.1 语音识别问题 详述语音识别的经典方法GMMHMM框架 5.2 深度模型 详述DNN-HMM结构 循环神经网络与CTC技术结构用于语音识别问题 六、自然语言处理 RNN-LM建模方法 6.1 中文分词 6.2 词性标注 6.3 命名实体识别 详述LSTMCRF进行命名实体识别的方法 6.4 文本…

ElasticSearch 性能优化

提升写入性能 使用 bulk 接口批量写入 节省重复创建连接的网络开销通过进行基准测试来找到最佳的批处理数量 延长 refresh 的时间间隔 通过延长 refresh(刷新)的时间间隔可以降低段合并的频率,段合并十分耗费资源默认的刷新频率为1s&…