typescript - Hva gjør nøkkelordet "as"?


if (process.env.NODE_ENV !== 'production') {
    (WithUser as any).displayName = wrapDisplayName(Component, 'withUser');
}

Jeg er ikke engang sikker på om as er et nøkkelord, men uansett, hva gjør det i JavaScript?

Svar #1

Det er ikke vanlig JavaScript, det er TypeScript. as any forteller kompilatoren å betrakte det typede objektet som et vanlig utypet JavaScript-objekt.

Nøkkelordet as er en Type Assertion i TypeScript som forteller kompilatoren å betrakte objektet som en annen type enn typen kompilatoren tolker objektet til å være.

Svar #2

Det er TypeScript, ikke vanlig JS, men for selve as: Det kalles Type Assertion, du forteller bare kompilatoren å behandle noe som en type:

var a = 'TEST STRING'
var b = a as string; //Means the compiler will assume it's a string

Det tilsvarer dette:

var a = 'TEST STRING'
var b = <string> a; 

Det kan imidlertid være forvirrende når man jobber med JSX (JS med HTML-tagger), så i slike tilfeller foretrekkes as-syntaksen.

Svar #3

Dette er en Typescript-operator, den er ikke tilgjengelig i ECMAScript 2015 (nyeste versjon av Javascript)

Som svarene ovenfor indikerte, er 'as'-operatoren en form for Typepåstand

For å ta et kort eksempel, si at du har to typer: Første og Andre. Du skriver en metode, og metoden vet ikke nøyaktig hvilken type objektet ditt vil være. Det kan være av typen Første eller Andre.

Så, du erklærer variabelen din uten en streng type. Når metoden din er klar over hvilken type variabelen din skal ha, kan du returnere den 'som den typen'.

Det virket litt vagt og tvetydig, men 'as'-operatoren utfører faktisk nøyaktig den samme funksjonen som et annet (mer kjent) mønster:

Disse to kodebiter gjør nøyaktig det samme

    let accountCode = '123';
    let castedAccountCode = <number>accountCode;

Bruke som nøkkelord:

    let accountCode = '123';
    let castedAccountCode = accountCode as number;

Svar #4

Denne typen typepåstand er ubrukelig, ettersom

function foo (a: string, b: string): number {
    return (a as number) + (b as number)
}

oversettes ganske enkelt til

function foo(a, b) {
    return a + b;
}

Jeg forventet først at det skulle være noe sånt som

function foo(a, b) {
    if (typeof a != 'string') throw ...
    if (typeof b != 'string') throw ...
    return Number(a) + Number(b)
}

men nei. TS gir brukerne en falsk følelse av sikkerhet.

Relaterte artikler