【问题标题】:A better way to do method overloading in Typescript? [duplicate]在 Typescript 中进行方法重载的更好方法? [复制]
【发布时间】:2014-03-09 03:35:21
【问题描述】:

我正在尝试使用 Typescript 重载方法。似乎 Java 或 C# 中通常的重载方式不适用于 Typescript。我不能这样做:

public sayHello(): string {
    var partialMessage = this.fullName +  " says hello to ";
    return partialMessage + "Unknown";
}

public sayHello(name: string) {
    var partialMessage = this.fullName +  " says hello to ";
    return partialMessage + obj;
}

我四处寻找,发现我必须这样做:

public sayHello():string;
public sayHello(name: string):string;
public sayHello(person:Person):string;

public sayHello(obj?: any) {
    var partialMessage = this.fullName +  " says hello to ";

    if(typeof obj === "string") {
        return partialMessage + obj;
    } else if(obj instanceof Person) {
        return partialMessage + (<Person>obj).fullName;
    } else {
        return partialMessage + "Unknown";
    }
}

这种方法对我来说似乎很不整洁且难以维护,因为我将所有内容都集中到一个方法中并使用 if/else 语句划分逻辑。

有没有更好的方法可以在 Typescript 中进行方法重载?

【问题讨论】:

  • @WiredPrairie 我知道如何在 Typescript 中重载方法。事实上,我已经在我的问题中展示了如何做到这一点。我的问题是在 Typescript 中是否有更好的方法来做到这一点。我只是不确定我是否遗漏了什么,因为在 TS 中重载方法的方式对我来说似乎不方便。
  • 我仍然建议这是相同的答案,只是以稍微不同的方式提出问题。

标签: javascript typescript overloading


【解决方案1】:

您必须使用第二种形式。 JavaScript 没有对函数参数甚至参数数量进行类型检查。给定名称只能存在一个函数版本。因此,当 TypeScript 编译为 JavaScript 时,它只能为给定的方法创建一个函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多