implementering - hur implementerar man överbelastad metod i TypeScript-interface?
jag är ny på TypeScript, här är ett gränssnitt som jag skulle vilja implementera;
interface IThing{
name:string;
age:number;
sayHello:{
(name:string):string;
(age:number):number;
}
}
sayHello har två signaturer vilket indikerar en överlagrad version. Jag vet bara inte hur man implementerar det i en klass, någon hjälp? Tack.
Svar #1
För att implementera en överlagrad funktion, skriv först alla överlagrade anropssignaturer som du vill ska vara synliga, följt av en implementeringssignatur som är en övermängd av alla överlagrade signaturer. Exempel:
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
