typescript - Varför måste namnet på en pilfunktion vara const/let?


Jag har en tsx-fil med react-native. Mitt funktionsnamn är understruket om funktionen inte är inställd på const eller let med detta meddelande:

Kan inte hitta namnet 'goBack'

goBack = () => {
    // do stuff
}

Men det fungerar om jag sätter const eller let:

const goBack = () => {
    // do stuff
}

Varför?

Svar #1

Detta har inget att göra med pilfunktioner. Du försöker tilldela ett värde till en identifierare som du inte har deklarerat någonstans.

Det här :

goBack = () => {
    // do stuff
}

tilldelar en pilfunktion till den redan deklarerade identifieraren goBack. (Eller, om detta vore inom en class, skulle det skapa en ny egenskap och tilldela pilfunktionen till den — men vi vet att du inte gör detta i en klass, eftersom din const-version skulle misslyckas om du gjorde det.)

Det är precis som:

answer = 42;

Om answer inte deklareras får du ett fel från TypeScript.

Det här :

const goBack = () => {
    // do stuff
}

skapar en lokal variabel (nåja, konstant) och tilldelar pilfunktionen till den, precis som:

const answer = 42;

Det är bra att komma ihåg att pilfunktioner inte har någon deklarationssyntax. En pilfunktion är alltid ett uttryck. Delen till vänster om = i dina exempel är inte en del av det pilfunktionsuttrycket (även om det, något förvånande, kan påverka den funktion som skapas).

Relaterade artiklar