typescript - «Objektet kan være udefinert»-feil selv etter sjekk
Jeg får feilen når jeg prøver å få tilgang til length-egenskapen. Jeg forstår at jeg kunne løse problemet ved å hente objektet kun én gang, og deretter utføre undefined-sjekken. Eller ganske enkelt legge til en !. Men jeg vil forstå hvorfor dette skjer, og finne ut om det finnes en bedre løsning. Her er det konstruerte eksempelet:
type MyMap<K extends string> = { [key in K]: string|undefined }
const getValueLength = (tmp:MyMap<string>, key:string) => {
return tmp[key] !== undefined && tmp[key].length
}
Jeg kjører TypeScript 3.3 i streng modus.
Her er et lignende spørsmål hvor problemet var at en sjekk ble gjort inne i en annen funksjon, det er ikke problemet her.
Svar #1
Å få tilgang til nøkkelen sees på som et funksjonskall, som potensielt kan endre objektet/verdi du ser på, derfor er det ingen garanti for at det første og andre kallet av tmp[key] finner det samme.
For å unngå dette, sørg for at du bare kaller det én gang:
type MyMap<K extends string> = { [key in K]: string | undefined };
const getValueLength = (tmp: MyMap<string>, key: string) => {
const str = tmp[key];
return str !== undefined && str.length;
};
