关于typescript重载的问题

image.png

type fun = {
    (normal:number):number;
    (normal:number,abnormal:string):string;
};

const f:fun=(a:number,b?:string)=>{
    return  b || a;
}

我不太明白这段代码为什么会报错。
typescript认为我返回值的格式为 number|string,与重载不匹配。
但实际上这段代码执行的逻辑确实是只有第一个参数,就返回number,如果有第二个参数就返回string。
请问我该如何写才合法呢?

阅读 2.6k
1 个回答

如果你这样定义就没问题

function f1(normal: number): number;
function f1(normal: number, abnormal: string): string;
function f1(normal: number, abnormal?: string): number | string {
    return abnormal || normal;
}

fun 是两个函数签名的重载,而 f 只有一个签名。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题