当前位置: 首页 > 知识库问答 >
问题:

在TypeScript中执行方法重载的更好方法?[重复]

充普松
2023-03-14

我正在尝试使用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/ther语句来划分逻辑

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

共有1个答案

汪欣德
2023-03-14

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

看见

  • http://typescript.codeplex.com/discussions/521020
 类似资料:
  • 在TypeScript语言中有方法重载吗?

  • 注意:参数的类型可以是完全不同的类型,与本例不同。

  • 问题内容: 有没有办法用TypeScript语言进行方法重载? 我想实现以下目标: 这是我不想做的一个例子(我真的很讨厌JS中重载hack的那一部分): 问题答案: 根据规范,TypeScript确实支持方法重载,但是它很笨拙,并且包含许多手动检查参数类型的工作。我认为这主要是因为在纯JavaScript中最接近方法重载的地方还包括检查,并且TypeScript尝试不修改实际的方法主体,以避免任何

  • 这可能看起来像是一个原始的问题,也可能是一个简单的实用程序库方法,我不知道。 目标是检查嵌套在两个对象下的布尔字段的值。 我知道这可以在一个中完成。为了可读性,我在这里添加了多个s。 有没有一种方法可以简化上面的语句,并有一个简单的实用程序类,在父对象是否为null时返回的值?

  • 我需要重写执行程序的执行方法,我需要改变线程超过核心池大小的行为,只有当队列已满时才会创建。 然而,在实时应用程序中,这种行为是不可取的,因为它会导致队列中存在的任务无休止地等待。 我已将execute方法更改如下: 尝试实现:核心线程-

  • 问题内容: 我一直像这样处理JavaScript中的可选参数: 有更好的方法吗? 有没有在这种情况下使用会失败的情况? 问题答案: 如果传递了optionalArg,您的逻辑将失败,但评估为false-尝试使用此方法 或另一种习语: 使用任何一种最能传达您意图的习语!