函数重载什么时候比联合参数合适?实现签名是什么?

先理解原理和示例,再练习完整口述与追问。

多种调用关系;重载对外、实现承载联合;能用泛型/联合表达就避免过度重载;运行时仍要判断。

重载为同一个实现提供多条合法调用签名,适合参数组合与返回值存在不同对应关系。实现签名需要兼容这些情况,但不是额外向调用者公开的任意入口。若输入与输出有统一的泛型关系,泛型可能更简洁;若只是不同行为共享一个结果,联合参数常更直接。

ts
function normalize(value: string): string
function normalize(value: string[]): string[]
function normalize(value: string | string[]) {
  return Array.isArray(value) ? value.map(item => item.trim()) : value.trim()
}
const single = normalize(' a ') // string
const many = normalize([' a ']) // string[]

实现签名存在联合不代表所有联合实参都能命中某条公开重载。声明重载不会在运行时自动生成多个函数。

重载表达合法调用形式与返回关系,只有一个实际函数实现。我保证实现覆盖全部签名,运行时自行判断;能用简单联合或泛型清晰表达时,就不堆重载。