在Typescript中进行方法重载的更好方法是什么?

时间:2014-02-11 11:16:06

标签: javascript typescript overloading

我正在尝试使用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中进行方法重载?

1 个答案:

答案 0 :(得分:0)

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