ts学习笔记-类系列

1、函数重载

具有相同名称但参数不同的两个或多个函数称为重载函数。

函数签名的含义:

函数签名 = 函数名称 + 函数参数 + 函数参数类型 + 返回值类型


// 这样写代码可读性差,不好维护--优化:使用函数重载
function searchMessage(value: number | MessageType): Message | Array<Message> | undefined {
  if (typeof value === 'number') {
    return messages.find((item) => item.id === value)
  } else {
    return messages.filter((item) => item.type === value)
  }
}
console.log(searchMessage('audio'))

 ts没有办法在运行之前根据传入的值来推导方法最终返回的数据的数据类型。

如果非要用这种方式获得数据,需要做类型转换或者断言

如下:

console.log((<Message>searchMessage(1)).sendMessage)
console.log((searchMessage(1) as Message).sendMessage)

重载

function searchMessage(value: number): Message
function searchMessage(value: MessageType): Array<Message>
function searchMessage(value: any) {
  if (typeof value === 'number') {
    return messages.find((item) => item.id === value)
  } else {
    return messages.filter((item) => item.type === value)
  }
}
console.log(searchMessage('audio'))
console.log(searchMessage(1))

重载规则:

1:由一个实现签名+一个或者让多个重载签名合成

2:外部调用的是重载签名,实现签名只是在定义时起到统领重载签名的作用,执行时看不到(实际执行时是执行的重载函数签名 + 实现签名函数体)

3:调用重载签名时,会根据传参判断调用哪一个函数

4:只有一个函数体,配备给了实现签名。重载函数只有签名,没有函数体

5:实现签名的参数可以小于重载签名

6:重载函数必须提供返回值,ts无法默认推导

any  vs unknown

unknow可以作为任意类型的父类,但是不能作为任意类型的子类

any既可以做为任意类型的父类,也可以作为任意类型的子类 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值