Hogyan állapítsa Vissza típusai a funkciók géppel

szavazat
68

Megnéztem itt http://go.microsoft.com/fwlink/?LinkId=267238 amely a géppel specifikációjának de nem láttam egy dolog, hogy hogyan tudok adni a visszaadott típus a funkciót. Megmutattam, mit vártam az alábbi kódot:greet(name:string) :string {}

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

Látom tudjuk használni valamit (name:string) => any, de ők használják leginkább, amikor elhaladnak a visszahívási funkció körül:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
A kérdést 04/10/2012 22:28
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
61

Igaza van - itt van egy teljesen működő példa - meglátod, hogy var resultimplicit módon egy string, mert a visszatérési típus van megadva a greet()funkciót. Változás az a típus number, és kapsz figyelmeztetést.

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

Itt látható a számot példa - meglátod piros squiggles a játszótéren szerkesztő ha megpróbálja ezt:

greet() : number {
    return "Hello, " + this.greeting;
}
Válaszolt 04/10/2012 22:32
a forrás felhasználó

szavazat
14

Elolvashatja többet funkciótípusok a nyelvspecifikáció szekciókban 3.5.3.5 és 3.5.5.

A géppel fordítóprogram következtetni típusok ha tudja is, és ez történik, akkor nem kell megadni explicit típus. így az üdvözlő például köszönteni () visszaad egy string literál, amely azt mondja a fordító, hogy a típus a függvény egy karakterlánc, és nem kell megadni a típus. így például ebben a mintában, már a üdvözlőt osztály egy greet módszer, amely visszaadja a húr, és egy változó, amelyet az első számú szó. a fordító következtetni mindkét típusú, és akkor kap egy hiba, ha megpróbál egy stringet egy számot.

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

Hasonlóképpen, ez a minta hibát fog okozni, mint a fordító, mivel az információ, nincs módja annak eldöntésére, hogy milyen típusú, és ez egy olyan hely lesz, ahol van, hogy explicit visszatérési típus.

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

Ez azonban fog működni:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Válaszolt 04/10/2012 23:43
a forrás felhasználó

szavazat
2
functionName() : ReturnType { ... }
Válaszolt 01/01/2018 16:43
a forrás felhasználó

szavazat
0

Vissza fajta felhasználásával nyíl jelölés ugyanaz, mint az előző választ:

const sum = (a: number, b: number) : number => a + b;
Válaszolt 04/11/2018 20:45
a forrás felhasználó

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