Hvorfor erklære en 'any'-returtype i TypeScript?


For eksempel:

function getUserInput(input: any): any {
    return input
}

Det virker dumt å erklære «alt kan returneres». Hva er hensikten?

Svar #1

Det er nyttig for late og uvitende.

Men ikke ta dette som en klage!

Noen ganger trenger du (eller klienten/sjefen din) å være lat når du skriver. Du trenger å skrive noe raskt når den faktiske typen er for komplisert, som allerede nevnt i artems svar.

Det kan gi fleksibilitet i koding. (selv om det til slutt kan føre til en dårlig kodebase)

I tillegg kan det godt hende at du er helt ubevisst om den faktiske returtypen til en API-kall eller en JavaScript-funksjon som er en svart boks for deg. Kanskje den dynamisk konstruerer et objekt og har dusinvis av mulige returstrukturer.

For eksempel: hvordan ville du skrive typen til resultatet av eval-funksjonen hvis den (rensede) inngangen kunne være en rekke ulike JSON-uttrykk, eller et tall, eller en streng, osv?

Når du begynner å skrive object | number | string | boolean | null, vil du heller skrive any for lesbarhet.

Men selvfølgelig bør du prøve å unngå dette så mye som mulig, det anses som dårlig praksis.

Uansett, jeg tror det ville komplisere ting å gå glipp av denne språkfunksjonen i visse virkelige situasjoner.

REDIGER : og jeg holdt nesten på å glemme det, men jeg tror TypeScript må ha denne funksjonen eller en lignende en i henhold til spesifikasjonen: enhver JavaScript-kode skal være "gyldig" TypeScript (kompilatoren vil gladelig akseptere hvilken som helst JS-kode som TypeScript, og rett og slett gjøre den om til den samme JS-koden, med de riktige kompilatorinnstillingene).

I slik JS-TS-kode må de fleste bindinger implicit typiseres som any for å passe til dette scenariet.

Svar #2

Det er ingen grunn til å gjøre det for kode som opprinnelig er skrevet i TypeScript.

Når du må bruke for eksempel getUserInput()-funksjonen som allerede er implementert i Javascript, kan en deklarasjon med any-returtype noen ganger brukes som en snarvei når den faktiske returtypen ikke er åpenbar, og du ikke ønsker å bruke tid på forhånd for å finne ut hvilken type som faktisk returneres under hvilke omstendigheter.

Relaterte artikler