这个概念是在一些强类型语言中才有的,在JS中依据不同参数类型或参数个数执行一些不同函数体的实现很常见,依托于TypeScript,就会有需要用到这种声明的地方。
关于函数重载,必须要把精确的定义放在前面,最后函数实现时,需要使用 | 操作符或者 ? 操作符,把所有可能的输入类型全部包含进去,以具体实现。如下例子1 和 例子3
例子1
例如我们有一个add函数,它可以接收string类型的参数进行拼接,也可以接收number类型的参数进行相加。
TypeScript 中的函数重载也只是多个函数的声明,具体的逻辑还需要自己去写,他并不会真的将你的多个重名 function 的函数体进行合并
考虑如下 例子2 :
在这个 test 函数里,我们的本意可能是当传入参数 para 是 User 时,不传 flag,当传入 para 是 number 时,传入 flag。TypeScript 并不知道这些,当你传入 para 为 User 时,flag 同样允许你传入:
使用函数重载能帮助我们实现:
实际项目中,你可能要多写几步,如在 class 中:
函数重载的意义在于能够让你知道传入不同的参数得到不同的结果,如果传入的参数不同,但是得到的结果(类型)却相同,那么这里就不要使用函数重载(没有意义)。
如果函数的返回值类型相同,那么就不需要使用函数重载
如何编写 Typescript 声明文件
巧用 TypeScript (一)