如何声明一个箭头函数的函数重载?

新手上路,请多包涵

如何声明一个箭头函数的函数重载

学习ts的函数重载时教学文章中都是使用普通函数的声明方式来实现函数重载

function func(foo: number, bar: true): string;
function func(foo: number, bar?: false): number;
function func(foo: number, bar?: boolean): string | number {
  if (bar) {
    return String(foo);
  } else {
    return foo * 599;
  }
}

对箭头函数实现相同的功能时做了一些尝试,但会报错

interface Func {
    (foo: number, bar: true): string;
    (foo: number, bar?: false): number;
    (foo: number, bar?: boolean): string | number;
}

const func: Func = (foo, bar) => {
    if (bar) {
        return String(foo);
      } else {
        return foo * 599;
      }
};

image.png
使用其他方式

interface Func {
    (foo: number, bar: true): string;
    (foo: number, bar?: false): number;
}

const func: Func = (foo: number, bar?: boolean): string | number => {
    if (bar) {
        return String(foo);
      } else {
        return foo * 599;
      }
};

还是报了相同错误

问下各位大佬,如何正确的声明一个箭头函数的函数重载类型🙏

阅读 3.4k
2 个回答
interface Func {
    (foo: number, bar: true): string;
    (foo: number, bar?: false): number;
}

const func = ((foo: number, bar?: any) => {
    if (bar) {
        return String(foo);
    } else {
        return foo * 599;
    }
 }) as Func

 var f1 = func(124, true)
 var f2 = func(123)

箭头函数不支持重载

https://github.com/microsoft/...

你这个场景最简单的解决方案就是使用 any

interface Func {
    (foo: number, bar: true): string;
    (foo: number, bar?: false): number;
}

const func: Func = (foo: number, bar?: boolean): any => {
    if (bar) {
        return String(foo);
      } else {
        return foo * 599;
      }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题