2013-07-31 7 views
7

i bin neu in Typoskript, hier ist eine Schnittstelle, die ich implementieren möchten;Wie implementiert man die Override-Methode in TypeScript Interface?

interface IThing{ 
    name:string; 
    age:number; 
    sayHello:{ 
     (name:string):string; 
     (age:number):number; 
    } 
} 

sayHello hat zwei Unterschriften, die Überlastung Version anzeigt. Ich weiß einfach nicht, wie man das in einer Klasse implementiert, keine Hilfe? Vielen Dank.

+0

Das sieht für mich nicht wie gültiges TypeScript aus. Haben Sie sich die Codebeispiele hier angesehen? http://www.typescriptlang.org/Tutorial/ –

+0

gibt es keine Fehler erfolgt über IntelSense, ich diesen Code-Schnipsel aus dem Typoskript Einführungsvideo bekommen hier: http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing -TypeScript –

+3

Dies ist absolut gültige TypeScript und das ist eine gültige, einfache Frage. Stimme, um wieder zu öffnen. –

Antwort

8

Um eine überladene Funktion schreiben, um alle Überlastung Anruf Signaturen Sie durch eine Implementierung Signatur zuerst, gefolgt sichtbar sein wollen zu implementieren, die ein Ober aller Überlastung Signaturen ist. Beispiel:

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 
+0

+1. Ich würde hinzufügen, dass Sie die Implementierungssignatur weglassen, wenn Sie einer Schnittstelle eine überladene Methode hinzufügen, die Sie nur für Klassen benötigen, wie in dieser Antwort gezeigt. – Fenton

+0

das funktioniert gut. Danke, ist dies der einzige Weg, diese Implementierung zu machen? Ich finde diesen überlagerten Mechanismus scheint nur verwendet werden, um den Typ der Eingabe Args/Return-Werte zu beschränken? Wenn nicht, könnte ich die Funktionssignatur als sayHello (arg: any) deklarieren: any in meiner Schnittstelle, und stopfen dann das Code-Snippet sayHello (arg: any): any {// if ... else ...} in meiner Implementierung Klasse. Irgendeine Hilfe lösche meine Verwirrung? –

+0

@Steve Fenton, tut mir leid, ich verstehe nicht, was Sie gut sagen, nur brauchen, dass für den Unterricht? –

Verwandte Themen