Cum să declare Tipuri de returnare pentru Funcții dactilografiat

voturi
68

Am verificat aici http://go.microsoft.com/fwlink/?LinkId=267238 care este specificațiile typescript de limbă , dar nu am putut vedea un lucru pe care cum pot declara un tip de întoarcere a funcției. Am arătat ceea ce mă așteptam în codul de mai jos:greet(name:string) :string {}

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

Văd putem folosi ceva , (name:string) => anydar acestea sunt folosite mai ales atunci când trece în jurul valorii de apel invers funcții:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Întrebat 04/10/2012 la 22:28
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
61

Ai dreptate - aici este un exemplu complet de lucru - veți vedea că var resulteste implicit un șir de caractere , deoarece tipul de retur este specificat pe greet()funcția. Schimbați tipul la numberși vei primi avertismente.

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

Iată exemplul numărul - veți vedea în roșu S-uri editor loc de joacă dacă încercați acest lucru:

greet() : number {
    return "Hello, " + this.greeting;
}
Publicat 04/10/2012 la 22:32
sursa de către utilizator

voturi
14

Puteți citi mai multe despre tipurile de funcții în caietul de sarcini limba în secțiunile 3.5.3.5 și 3.5.5.

Compilatorul va deduce typescript tipuri atunci când se poate, iar acest lucru se face nu trebuie să specificați tipuri explicite. astfel încât pentru exemplul Greeter, salut () returnează un șir literal, care spune compilatorului că tipul funcției este un șir de caractere, și nu este nevoie să specificați un tip. astfel încât, de exemplu, în această probă, am clasa Greeter cu o metodă Greet care returnează un șir și o variabilă care este atribuit la numărul literal. compilatorul va deduce ambele tipuri și veți obține o eroare dacă încercați să atribuiți un șir de caractere la un număr.

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

În mod similar, această probă va cauza o eroare compilator, având în vedere informațiile, nu are nici o modalitate de a decide tipul, iar acest lucru va fi un loc unde trebuie să aibă un tip de întoarcere explicită.

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

Acest lucru, cu toate acestea, se va lucra:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Publicat 04/10/2012 la 23:43
sursa de către utilizator

voturi
2
functionName() : ReturnType { ... }
Publicat 01/01/2018 la 16:43
sursa de către utilizator

voturi
0

Tipuri de returnare folosind săgeată notație este aceeași ca și răspunsurile anterioare:

const sum = (a: number, b: number) : number => a + b;
Publicat 04/11/2018 la 20:45
sursa de către utilizator

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