Come dichiarare tipi di ritorno per le funzioni a macchina

voti
68

Ho controllato qui http://go.microsoft.com/fwlink/?LinkId=267238 che è la Specifiche dattiloscritto di lingua , ma non riuscivo a vedere una cosa che come posso dichiarare un tipo di ritorno della funzione. Ho mostrato quello che mi aspettavo nel seguente codice:greet(name:string) :string {}

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

Vedo che possiamo usare qualcosa (name:string) => anyma sono utilizzati per lo più quando si passa le funzioni di callback in giro:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
È pubblicato 04/10/2012 alle 22:28
fonte dall'utente
In altre lingue...                            


4 risposte

voti
61

Lei ha ragione - qui è un esempio completamente funzionante - vedrai che var resultè implicitamente una stringa, perché il tipo di ritorno è specificato sul greet()funzionamento. Cambiare il tipo di numbere avrai avvertimenti.

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

Ecco l'esempio numero - si vedrà ghirigori rossi nell'editor parco giochi se provate questo:

greet() : number {
    return "Hello, " + this.greeting;
}
Risposto il 04/10/2012 a 22:32
fonte dall'utente

voti
14

Si può leggere di più su tipi di funzione nella specifica del linguaggio nelle sezioni 3.5.3.5 e 3.5.5.

Il compilatore dattiloscritto sarà inferire i tipi quando si può, e questo è fatto che non è necessario per specificare i tipi espliciti. così per l'esempio di benvenuto, salutare () restituisce una stringa letterale, che dice al compilatore che il tipo di funzione è una stringa, e non c'è bisogno di specificare un tipo. così per esempio in questo esempio, ho la classe Greeter con un metodo di saluto che restituisce una stringa, e una variabile che viene assegnato al numero letterale. il compilatore dedurre entrambi i tipi e si otterrà un errore se si tenta di assegnare una stringa in un numero.

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

Allo stesso modo, questo campione causerà un errore come il compilatore, date le informazioni, non ha modo di decidere il tipo, e questo sarà un luogo dove si deve avere un tipo di ritorno esplicito.

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

Questo, tuttavia, funzionerà:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Risposto il 04/10/2012 a 23:43
fonte dall'utente

voti
2
functionName() : ReturnType { ... }
Risposto il 01/01/2018 a 16:43
fonte dall'utente

voti
0

tipi di Ritorno usando la notazione freccia è lo stesso di risposte precedenti:

const sum = (a: number, b: number) : number => a + b;
Risposto il 04/11/2018 a 20:45
fonte dall'utente

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