¿Cómo declarar los tipos de retorno para las funciones a máquina de escribir

votos
68

Revisé aquí http://go.microsoft.com/fwlink/?LinkId=267238 que es el Especificaciones mecanografiado del idioma , pero no podía ver una cosa que la forma en que puedo declarar un tipo de retorno de la función. Le mostré lo que estaba esperando en el siguiente código:greet(name:string) :string {}

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

Veo que podemos usar algo (name:string) => any, pero se utilizan sobre todo cuando se pasa funciones de llamada en torno a:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Publicado el 04/10/2012 a las 22:28
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
61

Estás en lo correcto - aquí es un ejemplo completamente de trabajo - se verá que var resultes implícitamente una cadena porque no se especifica el tipo de retorno de la greet()función. Cambiar el tipo a numbery obtendrá 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 número - verá garabatos rojos en el editor de juegos infantiles si se intenta esto:

greet() : number {
    return "Hello, " + this.greeting;
}
Respondida el 04/10/2012 a las 22:32
fuente por usuario

votos
14

Puede leer más acerca de los tipos de función en la especificación del lenguaje en las secciones 3.5.3.5 y 3.5.5.

El compilador inferirá mecanografiado tipos cuando se puede, y esto se hace no es necesario especificar los tipos explícitos. por lo que para el ejemplo bienvenida, saludar () devuelve una cadena literal, que le dice al compilador que el tipo de la función es una cadena, y no hay necesidad de especificar un tipo. Así, por ejemplo, en esta muestra, no tengo la clase de bienvenida con un método de saludar que devuelve una cadena, y una variable que se asigna al número literal. el compilador inferirá ambos tipos y obtendrá un error si se intenta asignar una cadena en 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(); 

Del mismo modo, esta muestra se producirá un error como el compilador, dada la información, no tiene manera de decidir el tipo, y esto va a ser un lugar donde usted tiene que tener un tipo de rendimiento explícito.

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

Esto, sin embargo, funcionará:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Respondida el 04/10/2012 a las 23:43
fuente por usuario

votos
2
functionName() : ReturnType { ... }
Respondida el 01/01/2018 a las 13:43
fuente por usuario

votos
0

tipos de retorno utilizando la notación de flecha es la misma que las respuestas anteriores:

const sum = (a: number, b: number) : number => a + b;
Respondida el 04/11/2018 a las 20:45
fuente por usuario

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