首页 > 其他分享 >【TS】函数重载--可选参数--默认参数

【TS】函数重载--可选参数--默认参数

时间:2023-01-29 21:23:52浏览次数:47  
标签:console 函数 -- 数据类型 TS add 参数 string

可选参数--默认参数

ts中定义的数据类型,某些情况下只需要传入定义数据类型的一部分参数,比如:id 、name、age、address,此时需要修改用户的名称,那么只需要传入id、name就够了;某些情况下需要修改用户的所有信息,需要传入全部参数;可以定义两个接口分别接收,但在这里定义一个接口也可以做到,此处用的就是可选参数和默认参数。
语法:属性名 ?: 数据类型 = 值

// lastName ?: string   // 语法 ?: 为可选参数,可传可不传

const getFullName = function (firstName : string = '东方' , lastName ?: string) : string {
    if(lastName){
        return `${firstName},${lastName}`
    } 
    return firstName
}

// 调用函数不传参,使用默认参数,第二个为可选参数可不传
console.log(getFullName());
// 调用函数,只传一个,firstName将接收传入的值 '艺术概论'
console.log(getFullName('艺术概论'));
// 调用函数,传入两个参数,分别对应 firstName 和 lastName
console.log(getFullName('艺术','概论'));

打印结果
在这里插入图片描述
这种带?:的数据类型就是可传可不传的可选参数。


函数重载

在调用函数时,在参数上可以定义需要接收的数据类型,但如果这个函数在不同场合下都需要用到,那么定义一套数据类型规范显然是不够的,所以此处可以使用函数重载,可以在此基础上重新定义数据类型。

// 函数的参数可以传入 x 和 y ,并且这两者都可以是字符串或者数字   函数返回值也可以是字符串或数字
function add(x : string | number , y : string | number) : string | number {
    // 但是内部做限制,x和y只能是字符串或者只能是数字
    if(typeof x === 'string' && typeof y === 'string') {
        return x + y
    } else if (typeof x === 'number' && typeof y === 'number') {
        return x + y
    }
    return '未找到'
}

在这个案例中,虽然定义的参数 xy 可以既传数字也传字符串,那么 x传一个字符串,y传一个数字,显然是符合函数参数的数据规范的,但在函数内部,却对传入的值进行的数据类型校验,那么此时就只能在传参的时候做数据类型规范了,这里已经规范好了,在不更改原有函数类型的基础上,可以使用函数重载来重新定义函数的参数类型。

// 函数重载声明
function add (x : string , y : string) : string   // 传入x、y只能是字符串 返回的也是字符串
function add (x : number , y : number) : number   // 传入x、y只能是数字 返回的也是数字

此时传入的xy,要么只能都是数字,要么只能都是字符串

// 这两个传入没问题
console.log(add('东方','不败'));
console.log(add(100,200));

在这里插入图片描述
注意事项:
函数重载后,重载的数据类型会覆盖函数原本的数据类型约束,此时再按照原有的数据类型传入参数会报错提示。
在这里插入图片描述
但是,重载的数据类型可以随便使用,跟顺序无关。

console.log(add('东方','不败'));  // 字符串
console.log(add(100,200));       // 数字
console.log(add('东方','不败'));  // 字符串

在这里插入图片描述
关于函数和函数类型,请看另一篇:【TS】函数和函数类型


案例源码:https://gitee.com/wang_fan_w/ts-seminar

如果觉得这篇文章对你有帮助,欢迎点亮一下star

标签:console,函数,--,数据类型,TS,add,参数,string
From: https://www.cnblogs.com/wang-fan-w/p/17073839.html

相关文章

  • P1014 [NOIP1999 普及组] Cantor 表
    题目链接:https://www.luogu.com.cn/problem/P1014有理数可枚举In1873Cantorprovedtherationalnumberscountable,i.e.theymaybeplacedinone-onecorrespon......
  • 最长公共子序列问题
    给定两个字符串s1s2...sn和t1t2...tn。求出这两个字符串最长的公共子序列的长度。1<=n,m<=1000输入:abcdbecd输出:3(bcd)#include<bits/stdc++.h>usingnamespace......
  • Spring Boot读取resources目录下的文本文件
    Java8SpringBoot2.7.3IntelliJIDEA2022.3.2(CommunityEdition)-- 开门见山使用 ClassLoader的getResourceAsStream读取。注,还可以使用其下的静态方......
  • Armbian挂载硬盘(以及自动挂载)
    (一)Filesystem文件系統size文件大小Used使用空间Mountedon挂载的目录、查看系统所检测到的磁盘,这里的sda1检测到的硬盘但是没有被挂载(注意:这里sda1是’1’而不是......
  • 如何在es中查询null值
    目录1、背景2、需求3、准备数据3.1创建mapping3.2插入数据4、查询name字段为null的数据5、查询address不存在或值直接为null的数据6、参考链接1、背景在我们向es中写......
  • Fiddler抓取HTTPS最全(强)攻略!
    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler。但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了,这自然是极好的。但也......
  • Android开发 自定义View_时钟
    前言自定义View实现时钟涉及到三角函数,如果你对三角函数不甚了解或者已经遗忘,请参考我的博客:圆与三角函数的公式与使用  这篇博客详细解释了三角函数公式与对应坐......
  • 解决docker容器中yum找不到问题(已解决)
    1.容器内yum找不到......
  • 日语生词
    2023.1.29.20:30L16动词浴びますあびます(あびる)ーシャワーを浴びます乗りますのります(のる)ー電車に乗ります降りますおります(降りる)ー電車を降ります見学......
  • C#中的ref out
    1.都是按引⽤类型进⾏传递2.属性不是变量不能作为out、ref参数传递3.ref参数必须初始化。out不需要初始化4.作⽤,当⽅法有多个返回值时,out⾮常有⽤ staticvoidM......