Vous pouvez en savoir plus sur les types de fonctions dans le spécification du langage dans les sections 3.5.3.5 et 3.5.5.
Le compilateur TypeScript déduit les types lorsqu'il le peut, ce qui vous évite d'avoir à spécifier des types explicites. Ainsi, pour l'exemple du greeter, greet() renvoie un littéral de chaîne de caractères, ce qui indique au compilateur que le type de la fonction est une chaîne de caractères, et qu'il n'est pas nécessaire de spécifier un type. Ainsi, par exemple, dans cet exemple, j'ai la classe greeter avec une méthode greet qui renvoie une chaîne de caractères, et une variable qui est affectée à un littéral de nombre. Le compilateur déduira les deux types et vous obtiendrez une erreur si vous essayez d'affecter une chaîne de caractères à un 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 car le compilateur, étant donné l'information, n'a aucun moyen de décider du type, et ce sera un endroit où vous devrez 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;
}