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;
};

Relaterte artikler