Jak deklarują Zwracane typy funkcji w maszynopisie

głosy
68

Sprawdziłem tutaj http://go.microsoft.com/fwlink/?LinkId=267238 który jest Specyfikacja maszynopis językowe , ale nie mogłem zobaczyć jedną rzecz, że jak mogę zadeklarować typ zwracany przez funkcję. Pokazałem, co spodziewałem się w poniższym kodzie:greet(name:string) :string {}

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

Widzę możemy użyć czegoś (name:string) => any, ale są one wykorzystywane głównie podczas przechodzenia funkcje zwrotne wokół:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Utwórz 04/10/2012 o 22:28
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
61

Masz rację - tutaj jest przykładem w pełni funkcjonalny - zobaczysz, że var resultjest niejawnie ciąg ponieważ typ zwracany jest określony w greet()funkcji. Aby zmienić typ numberi dostaniesz ostrzeżenia.

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

Oto przykład numer - zobaczysz czerwone squiggles w edytorze zabaw jeśli spróbuj tego:

greet() : number {
    return "Hello, " + this.greeting;
}
Odpowiedział 04/10/2012 o 22:32
źródło użytkownik

głosy
14

Możesz przeczytać więcej o typach funkcyjnych w specyfikacji języka w sekcjach 3.5.3.5 i 3.5.5.

Kompilator maszynopis będzie wnioskować rodzajów kiedy można, a odbywa się to nie trzeba by określić wyraźne typy. tak na przykład logowania, pozdrawiam () zwraca ciąg dosłowne, który informuje kompilator, że rodzaj funkcji jest ciągiem znaków, i nie ma potrzeby, aby określić typ. tak na przykład w tym przykładzie, mam klasę logowania za pomocą metody przywitać, która zwraca ciąg i zmiennej, która jest przypisana do numeru dosłowne. kompilator będzie wnioskować obu rodzajów, a dostaniesz błąd, jeśli spróbujesz przypisać ciąg znaków na liczbę.

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

Podobnie, próbka ta spowoduje błąd jak kompilator, biorąc pod uwagę informacje, nie ma możliwości decydowania o rodzaju i będzie to miejsce, gdzie trzeba mieć wyraźny typ zwracany.

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

To jednak będzie działać:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Odpowiedział 04/10/2012 o 23:43
źródło użytkownik

głosy
2
functionName() : ReturnType { ... }
Odpowiedział 01/01/2018 o 16:43
źródło użytkownik

głosy
0

Powrotny rodzaje użyciem notacji strzałki jest taka sama jak poprzednich odpowiedzi:

const sum = (a: number, b: number) : number => a + b;
Odpowiedział 04/11/2018 o 20:45
źródło użytkownik

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