Jak ohlásit návratové typy pro funkce na psacím stroji

hlasů
68

Zde jsem zkontroloval http://go.microsoft.com/fwlink/?LinkId=267238 což je strojopis jazykové specifikace , ale neviděl jsem jednu věc, která, jak mohu deklarovat návratový typ funkce. Ukázal jsem, co jsem očekával v následující kód:greet(name:string) :string {}

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

Vidím, že můžeme použít něco (name:string) => any, ale jsou používány hlavně při předávání funkce zpětného volání kolem:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Položena 04/10/2012 v 22:28
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
61

Máte pravdu - tady je plně funkční příklad - uvidíte, že var resultje implicitně řetězec, protože návratový typ je uveden na greet()funkci. Změnit typ k numbera dostanete varování.

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

Zde je příklad číslo - uvidíte červené klikyháky na hřišti editoru, pokud si zkuste toto:

greet() : number {
    return "Hello, " + this.greeting;
}
Odpovězeno 04/10/2012 v 22:32
zdroj uživatelem

hlasů
14

Si můžete přečíst více o typech funkcí ve specifikaci jazyka v oddílech 3.5.3.5 a 3.5.5.

Strojopisu kompilátor bude odvozovat typů, kdy to možné, a to se provádí nemusíte specifikovat explicitní typy. tak pro příklad Greeter, pozdravit () vrátí řetězec doslovný, který říká kompilátoru, že typ funkce je řetězec, a není třeba specifikovat typ. tak například v tomto vzorku, mám třídu Greeter s metodou pozdravit, která vrací řetězec, a proměnnou, která je přiřazena k číslu doslovný. kompilátor bude odvozovat oba typy a dostanete chybu, pokud se pokusíte přiřadit řetězec na číslo.

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

Stejně tak tento vzorek způsobí chybu jako kompilátor, dané údaje, nemá možnost se rozhodnout, typ, a to bude místo, kde budete mít explicitní návratový typ.

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

To však bude fungovat:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Odpovězeno 04/10/2012 v 23:43
zdroj uživatelem

hlasů
2
functionName() : ReturnType { ... }
Odpovězeno 01/01/2018 v 16:43
zdroj uživatelem

hlasů
0

Návratové typy pomocí šipky značení je stejný jako předchozí odpovědi:

const sum = (a: number, b: number) : number => a + b;
Odpovězeno 04/11/2018 v 20:45
zdroj uživatelem

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