Wie erfolgt die Rückgabetypen für Funktionen in Typoskript erklären

stimmen
68

Ich habe hier http://go.microsoft.com/fwlink/?LinkId=267238 , welche das ist Typoskript Sprache Spezifikationen , aber ich konnte nicht eine Sache , sehen , dass , wie ich einen Rückgabetyp der Funktion deklarieren können. Ich zeigte , was ich in dem unten stehenden Code erwartet:greet(name:string) :string {}

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() : string{
        return Hello,  + this.greeting;
    }
}  

Ich sehe , wir etwas verwenden können , (name:string) => anyaber sie werden meist verwendet , wenn Callback - Funktionen , das um:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Veröffentlicht am 04/10/2012 um 22:28
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
61

Sie sind richtig - hier ist ein voll funktionsfähiges Beispiel - Sie werden sehen , dass var resultimplizit ein String ist , weil der Rückgabetyp auf der angegeben ist greet()Funktion. Ändern Sie den Typ an numberund Sie werden Warnungen erhalten.

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() : string {
        return "Hello, " + this.greeting;
    }
} 

var greeter = new Greeter("Hi");
var result = greeter.greet();

Hier ist die Zahl Beispiel - Sie roten Kringel auf dem Spielplatz Editor sehen werden, wenn Sie versuchen, diese:

greet() : number {
    return "Hello, " + this.greeting;
}
Beantwortet am 04/10/2012 um 22:32
quelle vom benutzer

stimmen
14

Sie können mehr über Funktionstypen in der lesen Sprachspezifikation in den Abschnitten 3.5.3.5 und 3.5.5.

Die Typoskript Compiler-Typen ableiten, wenn sie kann, und dies wird Sie explizite Typen nicht getan angeben. so für das Begrüßer Beispiel begrüßen () gibt einen Stringliteral, die den Compiler mitteilt, dass die Art der Funktion, eine Zeichenfolge ist, und keine Notwendigkeit, einen Typen zu spezifizieren. So zum Beispiel in diesem Beispiel habe ich die Begrüßer Klasse mit einem greet Methode, die einen String zurückgibt, und einer Variablen, die zugeordnet ist literal nummerieren. die Compiler beiden Typen ableiten und Sie erhalten eine Fehlermeldung, wenn Sie versuchen, eine Zeichenfolge in eine Zahl zuordnen.

class Greeter {
    greet() {
        return "Hello, ";  // type infered to be string
    }
} 

var x = 0; // type infered to be number

// now if you try to do this, you will get an error for incompatable types
x = new Greeter().greet(); 

In ähnlicher Weise wird diese Probe einen Fehler wie die Compiler verursachen, die Information gegeben, hat keine Möglichkeit, die Art zu entscheiden, und dies wird ein Ort, an dem Sie einen expliziten Rückgabetyp haben müssen.

function foo(){
    if (true)
        return "string"; 
    else 
        return 0;
}

Dies wird jedoch funktionieren:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Beantwortet am 04/10/2012 um 23:43
quelle vom benutzer

stimmen
2
functionName() : ReturnType { ... }
Beantwortet am 01/01/2018 um 16:43
quelle vom benutzer

stimmen
0

Rückgabetypen Pfeil-Notation ist das gleiche wie in früheren Antworten:

const sum = (a: number, b: number) : number => a + b;
Beantwortet am 04/11/2018 um 20:45
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more