Solución:
Tiene razón, aquí hay un ejemplo completamente funcional, verá que var result
es implícitamente una cadena porque el tipo de retorno se especifica en el greet()
función. Cambiar el tipo a number
y recibirás advertencias.
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();
Aquí está el ejemplo de número: verá garabatos rojos en el editor de juegos si intenta esto:
greet() : number {
return "Hello, " + this.greeting;
}
Puede leer más sobre los tipos de funciones en la especificación del lenguaje en las secciones 3.5.3.5 y 3.5.5.
El compilador de TypeScript inferirá tipos cuando pueda, y esto se hace, no es necesario especificar tipos explícitos. así que para el ejemplo de saludo, greet () devuelve un literal de cadena, que le dice al compilador que el tipo de la función es una cadena, y no es necesario especificar un tipo. entonces, por ejemplo, en esta muestra, tengo la clase de saludo con un método de saludo que devuelve una cadena y una variable que se asigna a un número literal. el compilador inferirá ambos tipos y obtendrá un error si intenta asignar una cadena a un número.
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 manera similar, esta muestra provocará un error ya que el compilador, dada la información, no tiene forma de decidir el tipo, y este será un lugar donde tendrá que tener un tipo de retorno explícito.
function foo(){
if (true)
return "string";
else
return 0;
}
Sin embargo, esto funcionará:
function foo() : any{
if (true)
return "string";
else
return 0;
}
Los tipos de retorno que usan la notación de flechas son los mismos que los de las respuestas anteriores:
const sum = (a: number, b: number) : number => a + b;