You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript静态类静态方法重载报错,求解决方案

解决TypeScript静态类中“重复函数实现”错误

你当前的代码报错,是因为TypeScript编译为JavaScript后,同名函数会被覆盖——TS支持类型层面的函数重载,但实现层面只能存在一个函数体,多个同名静态方法的写法不符合TS的实现规则。

下面提供两种可行的修正方案:

方案1:联合类型+类型守卫(推荐)

直接用联合类型定义参数,并通过typeof类型守卫在函数内部分支处理不同类型的转换逻辑:

export abstract class KeyPair {
  public static toString(val: boolean | number | string): string {
    if (typeof val === 'boolean') {
      // boolean转字符串:false→"0",true→"1"
      return (+val).toString();
    }
    if (typeof val === 'number') {
      // number转字符串
      return '' + val;
    }
    // string类型直接返回
    return val;
  }
}

方案2:函数重载写法

如果希望保留不同类型的重载签名提示,可以先声明重载签名,再写统一的实现逻辑:

export abstract class KeyPair {
  // 重载签名:仅声明类型,无实现
  public static toString(val: boolean): string;
  public static toString(val: number): string;
  public static toString(val: string): string;
  
  // 实现签名:处理所有可能的类型,编写具体逻辑
  public static toString(val: boolean | number | string): string {
    if (typeof val === 'boolean') {
      return (+val).toString();
    }
    if (typeof val === 'number') {
      return '' + val;
    }
    return val;
  }
}

使用示例

针对你提供的示例数据,可直接遍历调用转换方法:

const data = [
  { key: "key1", value: false },
  { key: "key2", value: "sample string"},
  { key: "key3", value: 55}
];

const convertedData = data.map(item => ({
  key: item.key,
  value: KeyPair.toString(item.value)
}));

console.log(convertedData);
// 输出结果:
// [
//   { key: "key1", value: "0" },
//   { key: "key2", value: "sample string" },
//   { key: "key3", value: "55" }
// ]

内容的提问来源于stack exchange,提问作者joyfuljoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:20:50