typescript - Hvordan raskt skille mellom grensesnitt med ikke-overlappende egenskaper
I TypeScript har jeg ofte en variabel med en type som:
const variable: { a: string } | { b: number };
Når jeg vil sjekke hvilken form variabelen har, vil jeg vanligvis gjøre
if (variable.a !== undefined) {
// do stuff
}
else {
// do stuff
Men i streng modus, kaster TypeScript en typefeil på variable.a fordi variable ikke er kjent for å ha egenskapen a. For å komme rundt dette, pleier jeg vanligvis å caste til any som (variable as any).a !== undefined. Men TypeScript behandler ikke dette som en typebeskytter og indikerer ikke typen til variable.
Finnes det en "riktig" måte å gjøre denne sjekken på i TypeScript når man er i streng modus (uten å lage en egendefinert type-guard)?
Noen eksempler jeg har prøvd (som dessverre også gir typefeil):
typeof variable.a !== 'undefined'variable.hasOwnProperty('a')
Svar #1
Den enkleste måten å diskriminere i dette tilfellet ville være en in-typebeskyttelse:
declare const variable: { a: string } | { b: number };
if ('a' in variable) {
variable.a
}
else {
variable.b
}
