2016-12-01 3 views
1

Hier ist mein Problem: Ich habe eine Klasse, die Schnittstelle implementiert. Methode greet sollte Rückgabetyp void haben, aber in meiner implementierten Klasse hat es string und Compiler warnt mich nicht. Und IDE auch nicht (ich benutze PHPStorm). Fehle ich etwas oder ist das beabsichtigt?Typescript-Compiler überprüft nicht die Gültigkeit der Methode 'Rückgabetyp

interface Person { 
    sex: string; 
    greet() : void; 
} 

class Boy implements Person { 
    sex: 'M'; 
    greet() { 
     return this.sex; 
    } 
} 

Ich verwende Typoskript 2.0.10

+0

Die [TypeScript Spielplatz] (http://www.typescriptlang.org/play/index.html) macht auch keine Warnung oder Fehler. Aber es regt sich darüber auf, wenn Sie "void" in "number" ändern ("greet" ist falsch, weil es eine Zeichenfolge zurückgibt). Es hängt also mit 'void' zusammen. –

Antwort

2

Es wird nicht beschweren, weil es nicht wirklich wichtig.
Ihre Schnittstelle deklariert, dass die Methode void zurückgibt, wenn Ihre Implementierung einen Wert zurückgibt, wird kein Schaden auftreten.
Beispiel:

let person: Person = new Boy(); 
person.greet(); 

Als person ist vom Typ Person (und nicht Boy), dann die greet Methode einen Wert nicht zurück, und in der Tat versuche ich keinen Rückgabewert zu verwenden.

Auf der anderen Seite, wenn sie das Gegenteil war:

interface Person { 
    sex: string; 
    greet(): string; 
} 

class Boy implements Person { 
    sex: 'M'; 
    greet(): void {} 
} 

Dann ein Fehler ausgelöst wird:

Klasse 'Boy' falsch implementiert Schnittstelle 'Person'.
Arten der Eigenschaft 'grüßen' sind inkompatibel.
Typ '() => void' ist nicht dem Typ '() => string' zuweisbar.
Der Typ 'void' kann nicht dem Typ 'string' zugewiesen werden.

+0

Danke für Ihre Antwort. –

Verwandte Themen