Hvordan å erklære returtyper for Funksjoner i Loggfila

stemmer
70

Jeg sjekket her https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md som er typescript språkspesifikasjonene , men jeg kunne ikke se en ting som hvordan jeg kan erklære en avkastning type funksjonen. Jeg viste hva jeg hadde ventet i koden under:greet(name:string) :string {}

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

Jeg ser vi kan bruke noe (name:string) => any, men de brukes mest når du passerer tilbakeringing funksjoner rundt:

function vote(candidate: string, callback: (result: string) => any) {
// ...
}
Publisert på 04/10/2012 klokken 21:28
kilden bruker
På andre språk...                            


4 svar

stemmer
64

Du er riktig - her er en fullt fungerende eksempel - vil du se at var resulter implisitt en streng fordi returtypen er angitt på greet()funksjonen. Endre typen til numberog du får advarsler.

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

Her er tallet eksempel - vil du se røde squiggles på lekeplassen redaktøren hvis du prøver dette:

greet() : number {
    return "Hello, " + this.greeting;
}
Svarte 04/10/2012 kl. 21:32
kilden bruker

stemmer
14

Du kan lese mer om funksjonstyper i språkspesifikasjonen i kapittel 3.5.3.5 og 3.5.5.

Loggfila kompilatoren vil antyde typer når den kan, og dette er gjort trenger du ikke å spesifisere eksplisitte typer. så for greeter eksempel ønske () returnerer en streng bokstavelig, som forteller kompilatoren at typen av funksjonen er en snor, og ikke noe behov for å spesifisere en type. slik at for eksempel i dette eksemplet, har jeg greeter klassen med en greet metode som returnerer en streng, og en variabel som er tildelt nummer bokstavelig. kompilatoren vil antyde begge typer, og du vil få en feilmelding hvis du prøver å tildele en streng til et tall.

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

Tilsvarende vil denne prøven forårsake en feil som kompilatoren, gitt den informasjonen, har ingen måte å bestemme hvilken type, og dette vil være et sted der du må ha en eksplisitt returtype.

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

Dette vil imidlertid fungere:

function foo() : any{
    if (true)
        return "string"; 
    else 
        return 0;
}
Svarte 04/10/2012 kl. 22:43
kilden bruker

stemmer
2
functionName() : ReturnType { ... }
Svarte 01/01/2018 kl. 16:43
kilden bruker

stemmer
0

Returtyper som bruker pil notasjon er den samme som tidligere svar:

const sum = (a: number, b: number) : number => a + b;
Svarte 04/11/2018 kl. 20:45
kilden bruker

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