带箭头功能的 typescript 重载方法

标签 typescript overloading arrow-functions

有人知道如何在箭头函数上使用方法重载吗?

foo(args: string): string
    foo(args: number): number
    foo(args: string | number): string | number {
        if (typeof args === "string") {
            return "string"
        }
        return 1
    }

试过了但是不行

foo: {
    (args: string): string;
    (args: number): number;
} = (args: string | number): string | number => {
    if (typeof args === "string") {
      return "string"
    }
    return 1
}

最佳答案

箭头函数不支持重载。来自language specification :

The descriptions of function declarations provided in chapter 6 apply to arrow functions as well, except that arrow functions do not support overloading.

当你写作时

foo: {
  (args: string): string;
  (args: number): number;
}

那么你就不会重载。你实际上说 foo 是一个可以采用其中一种形式(或者两种形式)的函数。箭头函数

(args: string | number): string | number =>

违反了该限制,因为它是单个函数(不是重载函数)和 string | number 表示您可以在需要字符串时返回数字。

正如 artem 已经提出的那样,将返回类型更改为 any 或交集类型可以解决问题。但这与重载不同,因为编译器不会在签名之间进行选择。您实际上只有一个:箭头函数。

关于带箭头功能的 typescript 重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50752853/

相关文章:

typescript - "Cannot find name ' ServiceWorkerRegistration 使用Typescript创建firebase云函数时出现'"错误

javascript - 为什么在我使用箭头函数 onClick 时我的变量未定义?

javascript - ES6 React 类构造函数之外的箭头函数的行为

javascript - 将箭头函数的内容复制到常规函数

angular - 包含第三方库的类型会导致未通过 angular CLI 找到模块?

javascript - TypeError : this. form._updateTreeValidity 不是函数

javascript - "No ' 访问控制允许来源 ' header is present on the requested resource.The response had HTTP status code 403."

c++ - 如何正确重载从基类到继承的转换

c++ - 常量方法重载

c++11 - 重载 noexcept 难道没有意义吗?