Comment déclarer les types de retour pour les fonctions dactylographiée

voix
68

J'ai vérifié ici http://go.microsoft.com/fwlink/?LinkId=267238 qui est le tapuscrit Language Spécifications mais je ne pouvais pas voir une chose que comment je peux déclarer un type de retour de la fonction. J'ai montré ce que j'attendais dans le code ci - dessous:greet(name:string) :string {}

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

Je vois que nous pouvons utiliser quelque chose , (name:string) => anymais ils sont principalement utilisés lors du passage des fonctions de rappel autour de :

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Créé 04/10/2012 à 22:28
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
61

Vous avez raison - ici est un exemple entièrement - vous verrez que var resultest implicitement une chaîne parce que le type de retour est spécifié sur la greet()fonction. Modifier le type de numberet vous aurez des avertissements.

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();

Voici le numéro par exemple - vous verrez gribouillis rouge dans l'éditeur de jeux si vous essayez ceci:

greet() : number {
    return "Hello, " + this.greeting;
}
Créé 04/10/2012 à 22:32
source utilisateur

voix
14

Vous pouvez en savoir plus sur les types de fonctions dans la spécification du langage dans les sections 3.5.3.5 et 3.5.5.

Le compilateur dactylographiée inférera types quand il le peut, et cela est fait, vous n'avez pas besoin de spécifier les types explicites. Pour l'exemple d'écran d'accueil, saluer () retourne une chaîne littérale, qui indique au compilateur que le type de la fonction est une chaîne, et pas besoin de spécifier un type. Ainsi, par exemple dans cet exemple, j'ai la classe Greeter avec une méthode de greet qui retourne une chaîne, et une variable qui est attribué au numéro littéral. le compilateur déduire les deux types et vous obtiendrez une erreur si vous essayez d'attribuer une chaîne à un certain nombre.

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(); 

De même, cet exemple provoquera une erreur que le compilateur, compte tenu des informations, n'a aucun moyen de décider du type, et ce sera un endroit où vous devez avoir un type de retour explicite.

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

Ceci, cependant, fonctionnera:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Créé 04/10/2012 à 23:43
source utilisateur

voix
2
functionName() : ReturnType { ... }
Créé 01/01/2018 à 16:43
source utilisateur

voix
0

types de retour en utilisant la notation de flèche est le même que les réponses précédentes:

const sum = (a: number, b: number) : number => a + b;
Créé 04/11/2018 à 20:45
source utilisateur

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