Hoe kan Return Types verklaren voor functies in typoscript

stemmen
68

Ik controleerde hier http://go.microsoft.com/fwlink/?LinkId=267238 dat is het typoscript taalspecificaties maar ik kon een ding dat hoe ik een return type van de functie kan verklaren niet te zien. Ik liet wat ik verwachtte in de onderstaande code:greet(name:string) :string {}

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

Ik zie dat we iets kunnen gebruiken (name:string) => any, maar ze worden meestal gebruikt bij het passeren van callback-functies rond:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
De vraag is gesteld op 04/10/2012 om 22:28
bron van user
In andere talen...                            


4 antwoorden

stemmen
61

Je bent juist - hier is een volledig werkend voorbeeld - u zult zien dat var resultis impliciet een string, omdat de return type is gespecificeerd op de greet()functie. Verander het type numberen u zult waarschuwingen krijgen.

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

Hier is het aantal voorbeeld - u zult rode squiggles zien in de speeltuin editor als u dit te proberen:

greet() : number {
    return "Hello, " + this.greeting;
}
antwoordde op 04/10/2012 om 22:32
bron van user

stemmen
14

U kunt meer informatie over de functie types lezen in de taal specificatie in de punten 3.5.3.5 en 3.5.5.

De Typescript compiler zal types afleiden wanneer het kan, en dit wordt gedaan u hoeft niet te expliciet types specificeren. zodat de host bijvoorbeeld groeten () een tekenreeks letterlijke, waarin de compiler dat het type van de functie een tekenreeks, en hoeft geen opgeven vertelt. zodat bijvoorbeeld in dit voorbeeld heb ik de host klasse met een greet methode die een tekenreeks en een variabele die wordt toegewezen nummer letterlijke. de compiler zal beide soorten afleiden en u zult een foutmelding krijgen als u probeert om een ​​string om een ​​nummer toe te wijzen.

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

Op dezelfde manier zal dit monster een fout als de compiler, gegeven de informatie te veroorzaken, heeft geen manier om de soort te beslissen, en dit zal een plek zijn waar je moet een expliciet return type hebben.

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

Dit is echter, zal werken:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
antwoordde op 04/10/2012 om 23:43
bron van user

stemmen
2
functionName() : ReturnType { ... }
antwoordde op 01/01/2018 om 16:43
bron van user

stemmen
0

Return typen met behulp van pijl notatie is hetzelfde als vorige antwoorden:

const sum = (a: number, b: number) : number => a + b;
antwoordde op 04/11/2018 om 20:45
bron van user

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