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
相关产品推荐
相关产品推荐

