typescript - Hvordan fortelle TS at hvis en variabel er sann, så eksisterer en annen
la oss si at jeg har en variabel som representerer tilstanden til en komponent, den kan enten være sann eller usann - isDialogPermanent: boolean
Og jeg har en variabel som kan være enten string eller undefined - username: string|undefined
Hvis isDialogPermanent er sann, vil jeg kjøre én funksjon, ellers en annen:
if (isDialogPermanent) {
someFunction(username);
} else {
anotherOne();
}
Problemet er at TS med rette klager over at brukernavnet kan være undefined (fordi someFunction() krever at parametere er string). Selv om i min arkitektur, hvis isDialogPermanent er sant, eksisterer username helt sikkert (med mindre noe uventet skjedde)
Hvordan fortelle TypeScript at hvis isDialogPermanent er sant, så eksisterer username?
Jeg har noen løsninger for å unngå TS-feil som:
- legg til
as string, f.eks.someFunction(username as string) - sammen med isDialogPermanent sjekk brukernavn, f.eks. hvis (isDialogPermanent && !!username) {...}
Selv om jeg ikke liker noen av dem fordi det føles som om jeg kjemper mot TS-feil i stedet for å få det til å fungere riktig (fordi alle disse omveiene bare er for å fikse TS-feil og gjør ikke koden bedre)
Ikke fokuser på kodesnutten min, det virkelige eksemplet er mer komplekst, så jeg prøvde å gjøre det så enkelt som mulig bare for å fremheve problemkilden.