我正在尝试使用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中进行方法重载?
答案 0 :(得分:0)
你必须使用第二种形式。 JavaScript没有对函数参数或甚至参数数量进行类型检查。只有一个函数版本可以存在给定名称。因此,当TypeScript编译为JavaScript时,它只能为给定方法创建单个函数。
见