TypeScript学习笔记6-函数类型

函数类型

在 TypeScript 中,函数类型提示是一种方法,用于声明函数的类型信息。它允许你在编写函数时指定参数的类型和返回值的类型,从而增加了代码的可读性和可维护性,同时还能在编译时进行类型检查。

函数类型提示有两种方式:分别是函数声明和箭头函数。

function add(x:number,y:number):number{return x+y;
}
const add = (x:number,y:number):number =>{return x+y;
}

注意。在函数类型提示中,参数和返回值的类型声明都是可选的。如果你省略了类型声明,TypeScript 会根据上下文进行类型推断。但是,通常为了代码的清晰和可读性,最好还是明确地声明函数的类型。

这里的类型还支持更加复杂的类型,1比如可选参数,默认参数和剩余次数

 可选参数和默认参数:

function greet(name: string, greeting: string = "Hello", punctuation?: string): string {if (punctuation) {return `${greeting}, ${name}${punctuation}`;} else {return `${greeting}, ${name}`;}
}

(greeting的参数类型是string,默认值是Hello,punctation的参数类型是stiring,但其背后紧跟了一个?,说明他是可选的)

【注意:如果有可选参数,你不能直接在函数体种直接运用可选参数,必须进行判断,比如if判断可选参数是否为undefined】

【注意2!:可选参数和默认参数不可能是同一个参数噢(因为默认参数就是不传的时候值为默认值)】

剩余参数:

是 TypeScript 中用于表示函数可以接受不定数量的参数的一种方式。它允许你定义一个参数,用来收集函数调用时传入的多余参数,将它们收集到一个数组中。

在函数类型提示中,剩余参数使用省略号 (...) 表示,紧跟在参数名的后面。通常,剩余参数会放在函数参数列表的最后面。

function sumAll(...numbers: number[]): number {return numbers.reduce((total, num) => total + num, 0);
}const result = sumAll(1, 2, 3, 4, 5);
console.log(result); // 输出:15

 参数还可以是接口类型,这样子可以有类型提示

比如

interface getUserListRequest {page?:numberlimit?:numberkey?:stringname?:string
}function getUserList(params:getUserListRequest){console.log(params.limit) // 有类型提示
}

另外,ts是支持函数重载的,而js不支持

函数重载允许为同一个函数提供多个函数类型定义,在不同的参数组合或返回值类型下执行不同的实现。

function double(value: number): number;
function double(value: string): string;
function double(value: any): any {if (typeof value === 'number') {return value * 2;} else if (typeof value === 'string') {return value.repeat(2);}
}const result1 = double(10); // result1 的类型为 number,值为 20
const result2 = double('hello'); // result2 的类型为 string,值为 'hellohello'

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

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

相关文章

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

文章目录 1)数字三角形1:顺推2:逆推 2)最长上升子序列1:线性DP做法2:二分优化 3)最长公共子序列4)最长公共子串5)字符串编辑距离 1)数字三角形 1&#xff1a…

vue跨页选中回显问题解决

如不理解可以评论&#xff0c;看到会 一 一 回复 ↓ 实现分页选中跨页还能选中其他数据回显 <el-pagination background style"background-color: #ffffff" size-change"handleSizeChange"current-change"handlePageChange" :current-page&q…

MySQL 通信协议 tcp c/s架构 jdbc java

简介 服务器启动后&#xff0c;会使用 TCP 监听一个本地端口&#xff0c;当客户端的连接请求到达时&#xff0c;就会执行三段握手以及 MySQL 的权限验证&#xff1b;验证成功后&#xff0c;客户端开始发送请求&#xff0c;服务器会以响应的报文格式返回数据&#xff1b;当客户…

股票高胜率的交易法则是什么?

股票交易中的高胜率交易法则并非一成不变&#xff0c;而是根据市场状况、个人投资风格和经验等多种因素综合而定的。以下是一些有助于提升交易胜率的法则和策略&#xff1a; 1.趋势跟踪法则&#xff1a;在股票交易中&#xff0c;趋势跟踪是一种有效的策略。通过观察大盘和个股…

快速排序:深入解析其原理、实现与性能特性

快速排序&#xff0c;以其名字所示&#xff0c;是一种追求速度的高效排序算法。作为分治法在排序问题上的典型应用&#xff0c;快速排序凭借其平均情况下近乎理想的O(n log n)时间复杂度和简洁的实现逻辑&#xff0c;在实际编程与数据处理中占据着重要地位。本篇博客将详细解析…

Week6-LeetCode

1600.王位继承顺序 (中等) 关键思路&#xff1a; 多叉树的前序遍历。 class ThroneInheritance(object):def __init__(self, kingName):""":type kingName: str"""self.king kingNameself.dead set() # 记录死亡人员self.edges defaultdict…

Hadoop安装部署-NameNode高可用版

Hadoop分布式文件系统支持NameNode的高可用性&#xff0c;本文主要描述NameNode多节点高可用性的安装部署。 如上所示&#xff0c;Hadoop分布式文件系统部署了NameNode的Master主节点以及NameNode的Slave副节点&#xff0c;当Master主节点发生故障变得不可用时&#xff0c;ZooK…

llama-factory SFT系列教程 (一),大模型 API 部署与使用

文章目录 背景简介难点 前置条件1. 大模型 api 部署下一步阅读 背景 本来今天没有计划学 llama-factory&#xff0c;逐步跟着github的文档走&#xff0c;发现这框架确实挺方便&#xff0c;逐渐掌握了一些。 最近想使用 SFT 微调大模型&#xff0c;llama-factory 是使用非常广泛…

python之文件操作与管理

1、文件操作 通过open&#xff08;&#xff09;操作&#xff0c;来创建文件对象&#xff0c;下面是open&#xff08;&#xff09;函数语法如下&#xff1a; open&#xff08;file,mode r,buffering -1 , encoding None ,errors None , newline None,closefd True,opener …

【综合分析类】校园霸凌

题目&#xff1a;近日&#xff0c;某地发生了一名初中生被3名初中生霸凌致S的事件&#xff0c;在社会上引起了广泛争议。有人呼吁&#xff0c;要完善未成年人保护法&#xff0c;进一步惩戒有关未成年的犯罪人员。对此你怎么看。 逐字稿&#xff1a;各位考官&#xff0c;考生思…

14. TypeScript类型保护(类型缩小、类型守卫)

类型保护是一种TypeScript技术&#xff0c;用于获取变量类型信息&#xff0c;通常使用在条件块语句中。 类型守卫是返回布尔值的常规函数&#xff0c;接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。 TypeScript类型保护的方式 类型断言 类型断言是一种告诉编译器…

汇编基础-----常见命令基本使用

汇编基础-----常见命令基本使用 MOV&#xff1a;将数据从一个位置复制到另一个位置。 MOV destination, source例如&#xff1a; MOV RAX, RBX ; 将RBX寄存器中的值复制到RAX寄存器中ADD/SUB&#xff1a;将两个操作数相加或相减。 ADD destination, source SUB destinatio…

Python(3):条件语句+循环语句+逻辑运算符+符号优先级

文章目录 一、if语句1.if语句2.if 和 elif区别3.三元表达式 二、循环语句1.range函数和循环结束关键字2.while循环3.for循环 三、逻辑运算符1.and语句2.or语句3.not语句4.逻辑运算法的优先级 四、python运算符优先级和结合性一览表 一、if语句 1.if语句 1.if单分支语句 格式…

Python项目1 外星人入侵_外星人

在本章中&#xff0c;我们将在游戏《外星人入侵》中添加外星人。首先&#xff0c;我们在屏幕上边缘附近添加一个外星人&#xff0c;然后生成一群外星人。我们让这群外星人向两边和下面移 动&#xff0c;并删除被子弹击中的外星人。最后&#xff0c;我们将显示玩家拥有的飞船数量…

Python-configparser更新write保留注释

背景 python语言用来解析配置文件的模块是ConfigParser&#xff0c;python3中是configparser模块&#xff0c;在使用中经常用到write方法将配置项重新写入文件&#xff1a; config.ini文件&#xff1a; # 数据库配置 [database] # 主机 # IP host localhost # 端口 port 3…

从路由器syslog日志监控路由器流量

路由器是关键的网络基础设施组件&#xff0c;需要随时监控&#xff0c;定期监控路由器可以帮助管理员确保路由器通信正常。日常监控还可以清楚地显出通过网络的流量&#xff0c;通过分析路由器流量&#xff0c;安全管理员可及早识别可能发生的网络事件&#xff0c;从而避免停机…

关于STL容器线程安全性的问题

关于STL容器线程安全性的问题 STL容器&#xff08;如vector&#xff09;本身并不是线程安全的&#xff0c;因此在使用它们进行多线程编程时需要格外小心。即便写入操作&#xff08;由生产者执行&#xff09;是由单线程完成的&#xff0c;但在并发读取时&#xff0c;由于可能发…

程序员如何搞副业——中学生视角看职业拓展的深入探索

在数字化浪潮席卷全球的今天,程序员这一职业因其独特的魅力和广阔的发展前景而备受瞩目。作为一名中学生,虽然尚未步入职业领域,但提前了解程序员的副业之路,不仅可以帮助我们拓宽视野,还能为未来的职业规划提供有益的参考。 首先,个人项目开发是程序员搞副业的一个重要…

计算机中,逻辑端口

计算机中,端口是什么 在计算机领域中,端口(Port)是一个逻辑概念,用于标识计算机与外部设备或另一台计算机通信时的出入口。它是计算机与外部通信的途径,分为物理端口和逻辑端口两种。 物理端口:物理端口也被称为接口,是计算机主板上或其他设备上的硬件接口,如USB接口…

算法训练营第二十三天(二叉树完结)

算法训练营第二十三天&#xff08;二叉树完结&#xff09; 669. 修剪二叉搜索树 力扣题目链接(opens new window) 题目 给定一个二叉搜索树&#xff0c;同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[L, R]中 (R>L) 。你可能需要改…