关于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。
请问我该如何写才合法呢?

已解决 悬赏分:0 - 解决时间 2022-01-04 12:22
反对 0举报 0 收藏 0

回答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 只有一个签名。

    支持 0 反对 0 举报
    2022-01-04 08:18