我是新来的打字稿,这里是我想要实现的界面;如何在TypeScript接口中实现重写方法?
interface IThing{
name:string;
age:number;
sayHello:{
(name:string):string;
(age:number):number;
}
}
的sayHello都有两个签名指示过载版本。我只是不知道如何在课堂上实施,有什么帮助?谢谢。
我是新来的打字稿,这里是我想要实现的界面;如何在TypeScript接口中实现重写方法?
interface IThing{
name:string;
age:number;
sayHello:{
(name:string):string;
(age:number):number;
}
}
的sayHello都有两个签名指示过载版本。我只是不知道如何在课堂上实施,有什么帮助?谢谢。
要实现重载函数,请首先编写想要首先显示的所有重载呼叫签名,然后写入作为所有重载签名超集的实现签名。例如:
class Thing implements IThing {
// Implement the name and age fields
name: string;
age: number;
// Overload signature #1
sayHello(name: string): string;
// Overload signature #2
sayHello(age: number): number;
// Implementation signature, not visible to external callers
sayHello(arg: any): any {
if(typeof arg === 'string') {
return this.name;
} else if(typeof arg === 'number') {
return this.age;
} else {
throw new Error('sayHello can only take string or a number');
}
}
}
var x = new Thing();
var n = x.sayHello('world'); // n: string
var a = x.sayHello(42); // a: number
var e = x.sayHello(false); // error: false is not string or number
+1。我会补充说,当向接口添加一个重载方法时,你省去了实现签名,你只需要这个类,如这个答案所示。 – Fenton
这工作正常。谢谢,这是做这个实现的唯一方法吗?我觉得这个重写机制似乎只是用来限制输入参数/返回值的类型?如果不是,我可以声明函数签名为sayHello(arg:any):any在我的界面中,然后填充代码片段sayHello(arg:any):any {// if ... else ...}在我的实现中类。任何帮助清除我的困惑? –
@Steve Fenton,对不起,我不明白你说的很好,只需要上课? –
这对我来说看起来不像是有效的TypeScript。你有看过代码示例吗? http://www.typescriptlang.org/Tutorial/ –
有没有错误发生通过IntelSense,我从这里打字稿介绍视频这里的代码片段:http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing -TypeScript –
这是完全有效的TypeScript,这是一个有效的,直接的问题。投票重新打开。 –