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.
