在静态类型语言中,比如java、c++,都有函数重载的概念,它指的是:两个函数,如果它们的名称相同,参数个数或者类型不同,那么就实现了一个函数的重载。 函数重载的好处:不需要为了功能相似的函数定义不同的函数名称,以增强函数的可读性
function add(...rest:number[]):number
function add(...rest:string[]):string
function add(...rest:any[]):any{
let first = rest[0]
if(typeof first === 'string'){
return rest.join('')
}
if(typeof first === 'number'){
return rest.reduce((pre,cur)=>pre + cur)
}
}
TS编译器在处理重载的时候,会去查询一个重载的列表,也就是我们前面定义的列表,并且会尝试第一个定义,如果匹配的话,就用当前函数定义;如果不匹配的话,会接着查找下一个。所以,我们要把最容易匹配的函数定义写在最前面。