当前位置: 首页 > news >正文

六. 函数

基本使用

ts与js一样拥有具名函数和匿名函数两种函数类型。但是ts的函数需要提前定义好参数类型以及函数的返回值类型。

具名函数

function add(num1: number, num2: number):number {return num1 + num2
}

匿名函数
匿名函数的定义相对麻烦,我们需要提前定义函数的类型

// 直接使用类型推导
//const add = (num1: number, num2: number):number => {
//    return num1 + num2
//}
// 还可以反向类型推导
//const add: (num1: number, num2: number) => number = (x, y) => x + y
const add: (num1: number, num2: number) => number = (num1: number, num2: number):number => num1 + num2

函数参数

ts里面每个函数参数都是必须的,函数参数的数量与类型必须完全一致才可以使用函数。

function add (num1: number, num2: number):number {return num1 + num2
}
// add('1')  Expected 2 arguments, but got 1.
// add('1', 1) Argument of type 'string' is not assignable to parameter of type 'number'.
add(1, 1) 

我们也可以使用?指定一个函数参数非必传,当然这种参数需要放到所有参数的末尾。

function add (num1: number, num2: number, num3?:number):number {return num1 + num2 + (num3 ? num3 : 0)
}
console.log(add(1, 1) )    // 2
console.log(add(1, 1, 1) ) // 3

我们还可以给函数参数设置默认值

function add (num1: number, num2: number, num3:number = 0):number {return num1 + num2 + num3
}
console.log(add(1, 1) )   // 2
console.log(add(1, 1, 1) )// 3

事实上如果给末尾的参数设置默认值效果是等同于在末尾使用?指定非必传参数的

在js里面如果我们并不知道将会有多少参数传入,可以使用arguments进行所有参数的接收,也可以使用es6...的方式收集到数组里。
而在ts里面我们同样可以这样操作

function add (num1: number, num2: number, num3:number = 0):number {console.log(arguments) // {‘0’: 1, '1': 2}return num1 + num2 + num3
}
console.log(add(1, 1) )
function add (num1: number, ...arg:number[]):number {console.log(arg) // [2,3,4]return num1 
}
console.log(add(1, 2, 3, 4) )

函数重载

所谓函数重载,就是指的是拥有多个函数签名,一个函数体实现。

function calculateAverage(nums: number[]): number;
function calculateAverage(str: string): number;
function calculateAverage(arrOrStr: number[] | string): number {if (Array.isArray(arrOrStr)) {let sum = arrOrStr.reduce((a, b) => a + b);return sum / arrOrStr.length;} else {let nums = arrOrStr.split(',').map(Number);let sum = nums.reduce((a, b) => a + b);return sum / nums.length;}
}console.log(calculateAverage([1, 2, 3])); // 输出结果为 2
console.log(calculateAverage("1,2,3")); // 输出结果为 2
http://www.lryc.cn/news/259912.html

相关文章:

  • SpringBoot的Starter自动化配置,自己编写配置maven依赖且使用及短信发送案例
  • <蓝桥杯软件赛>零基础备赛20周--第9周--前缀和与差分
  • LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】
  • Redisson分布式锁原理分析
  • 【Linux】:线程(二)互斥
  • vscode报错Pylance client: couldn‘t create connection to server.
  • 智能优化算法应用:基于萤火虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • MacOS多屏状态栏位置不固定,程序坞不小心跑到副屏
  • Python:pipdeptree 语法介绍
  • 【问题处理】—— lombok 的 @Data 大小写区分不敏感
  • 跟着我学Python基础篇:08.集合和字典
  • Tomcat部署(图片和HTML等)静态资源时遇到的问题
  • 在接触新的游戏引擎的时候,如何能快速地熟悉并开发出一款新游戏?
  • 计网 - TCP四次挥手原理全曝光:深度解析与实战演示
  • 个人养老金知多少?
  • gpt3、gpt2与gpt1区别
  • PyQt6 QDateEdit日期控件
  • 【无线网络技术】——无线城域网(学习笔记)
  • RK3568平台 OTA升级原理
  • mysql迁移步骤
  • 计算机网络应用层(期末、考研)
  • Jenkins离线安装部署教程简记
  • 如果一个嵌套类需要在单个方法之外仍然是可见,或者它太长,不适合放在方法内部,就应该使用成员类。
  • Vue3 中的 Proxy--读懂ES6中的Proxy
  • zk_dubbo
  • Windows 安全基础——NetBIOS篇
  • 【基础知识】Hadoop生态系统
  • [Linux] LAMP架构
  • HPM5300系列--第二篇 Visual Studio Code开发环境以及多种调试器调试模式
  • LeetCode2697. Lexicographically Smallest Palindrome