TypeScript中$sum重载函数报错,求助解决方法
错误原因及修复方案
核心问题点
- 函数重载实现不规范:TypeScript里函数重载的实现部分,参数类型必须覆盖所有重载签名的类型,你当前的实现未指定参数类型,触发类型检查报错。
- 变量未初始化:
xor_没有初始值,默认是undefined,直接拼接会得到undefinedxxx或undefined123这类错误结果。 - 类型判断逻辑错误:
xor instanceof String是判断参数是否为String对象实例,但你的参数是数组(string[]或number[]),这个判断永远为false,导致字符串数组也会走数字相加的逻辑,结果完全错误。
修复后的代码
function $sum(xor: string[]): string; function $sum(xor: number[]): number; function $sum(xor: string[] | number[]): string | number { // 根据数组第一个元素类型初始化累加变量,空数组默认返回0 let xor_: string | number = xor.length > 0 ? (typeof xor[0] === 'string' ? '' : 0) : 0; if (typeof xor[0] === 'string') { for (const i of xor) { xor_ += i as string; } } else { for (const i of xor) { xor_ += i as number; } } return xor_; }
补充说明
- 空数组场景这里默认返回
0,如果需要其他处理逻辑可以自行调整。 - 用
typeof xor[0]判断数组元素类型,更适配字符串/数字这类基本类型的判断,比instanceof更可靠。
内容的提问来源于stack exchange,提问作者emanuel victor
相关产品推荐
相关产品推荐

