这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战
接上一篇:TypeScript实例讲解(十一)
本篇内容:函数重载。
JavaScript 是动态语言,本身不需要重载,JavaScript 函数可以根据传入不同的参数而返回不同类型的数据,这也是我们以前常见的。而 TypeScript 需要做类型检查,为满足新的需要有了函数重载的概念。
// 例 1
function personInfo (name, ...others) {
console.log(name, others)
}
personInfo('bear', {age: 20, weight: 50})
例1是以前常见的根据函数定义判断参数类型与数量。这样虽然能够满足一些特别的需求,但是没有做参数类型检查,可能会引起一些问题。在 TypeScript 中我们就可以通过函数重载的方式做一个约定,对参数做一个约束。
// 例 2
function print(param1: number, param2: string)
function print(param1: string, param2: number)
function print(param1: any, param2: any) {
// 根据函数参数类型作出不同的行为,这里就简单打印出来
console.log(param1, param2)
}
print(1, 'a') // 正常
print('a', 2) // 正常
print(1, 2) // 提示错误
例2中为同一个函数提供多个函数类型定义来进行函数重载。注意要把最精确的定义放在最前面,最后一般为重载函数的实现。
例2中函数第一个参数为 number, 则第二个参数就必须为 string;第一个参数为 string,则第二个参数必须为 number。
函数重载其实上是多个函数的函数名称相同,函数的参数类型、参数顺序以及参数个数不相同。注意函数重载与返回值类型无关。TypeScript 的函数重载也不是很智能,也有人说这不是真正意义上的重载,最终函数逻辑的实现还是在一个函数体内去判断它的参数类型,然后做相应的操作。但 TypeScript 函数重载依然有作用,可以对传入的参数进行约束。也就是在进行函数调用的时候,会对参数进行检查,只有传入的参数类型、顺序、个数与定义的重载函数的参数相同,才能调用成功,否则报错。返回值类型不会进行校验。
本篇完!如果文章对你有一点点帮助,请记得点个赞哦。