typescript - Hva er galt med typeof a == "array"?
Prøv på lekeplassen:
typeof a == "array"
vil resultere i
Operatoren '==' kan ikke brukes på typer '"string" | "number" | "symbol" | "object" | "function"' og '"array"'.)
Ikke bare gir ikke denne feilmeldingen mening for meg (typeof a == "object" er helt greit), det ser også ut til å være en nylig endring. Du må nå bruke a instanceof Array, noe som ikke var nødvendig sist jeg sjekket. Kan du vennligst forklare dette for meg?
Svar #1
Som påpekt av SLaks, kan aldri typeof-operatoren returnere "array". https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
Det har aldri fungert, men TypeScript ble først smart nok til å advare deg om det i 2.0.
Svar #2
Her er et fullt fungerende eksempel for deg:
var a: string | string[];
// You need this in the example to ensure the compiler won't determine that a
// is never a string if you set it to an array...
if (new Date().getDay() > 3) {
a = 'a string';
} else {
a = [
'an',
'array'
];
}
if (Array.isArray(a)) {
var example1 = a; // example1: string[]
} else {
var example2 = a; // example2: string
}
Den midterste kodeblokken er kun nødvendig for demonstrasjonsformål, hvis du starter dette eksemplet med var a: string | string[]=[] vil variabelen example2 faktisk ende opp med å være av typen never fordi kompilatoren er smart nok til å se at det ikke finnes noen situasjon der a-variabelen vil bli satt til noe annet enn en array.
