ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # 重载作用 ~~~ 1.JavaScript 是一门动态语言,针对同一个函数,它可以有多种不同类型的参数与返回值,这就是函数的多态 2.但是函数参数经过多种组合返回值的结果往往可能同,以下面案例来看 ~~~ >[danger] ##### 案例一 ~~~ 1.下面案例其实通过逻辑来看很明显知道如果没有y值那返回就是数字类型 ,如果有y 值就是字符串,但是类型推导 或者是我们自定义返回类型时候都只能是一个'string | number' 联合类型,相对来说产生问题我明知道他具体类型是啥了 调用后却只能是一个联合类型 2.当然也可以 as 强行推断 ~~~ ~~~ // 如果y 有值返回的是 x+y 的字符串 // 如果y 没值返回是 x function convert(x: number, y?: string) { if (y) { return String(x) + y } return x } const str = convert(1, '1') // 类型推导const str: string | number const num = convert(1) // 类型推导const num: string | number ~~~ ![](https://img.kancloud.cn/a0/b7/a0b7103147b3fea5af526768a5eb4aaf_832x293.png) * 明知道它只能是数字类型但实际推导式联合 ![](https://img.kancloud.cn/f7/dd/f7ddf32b920d82ad7dfecc67df522e6e_906x335.png) >[danger] ##### 解决案例一的问题 ~~~ 1.可以利用重载将多种情况声明这样就可推导类型更细致 ~~~ ~~~ function convert(x:number):number function convert(x:number,y:string):string function convert(x: number, y?: string) { if (y) { return String(x) + y } return x } const str = convert(1, '1') // 类型推导const str: string const num = convert(1) // 类型推导const num: number ~~~ * 图 ![](https://img.kancloud.cn/09/38/09384138cb7a4e436816247d14c86f20_748x318.png)