Valinnainen ketjutus ei aiheuta undefined-arvoa Typescriptissä


Jos minulla on taulukko taulukoita, niin ei ole turvallista tehdä sokeasti

const a=array[index1][index2], koska array[index1] voisi olla undefined, mikä johtaisi virheeseen. Se, mitä odotin tapahtuvan kun puolustin sitä käyttämällä const a=array[index1]?.[index2], oli että a olisi union-tyyppi undefined:n kanssa. Näin ei kuitenkaan tapahdu - näen sen perustaulukon tyypin mukaisena.

Kuinka voin suojautua koodissa siten, että TS voi havaita mahdollisuuden undefined:iin käännösaikana?

MCVE :

type A = {
    owner?: string,
    feline?: string
}

const arr: Array<Array<A>> = []

const item = arr[2]?.[5]; // typed as A rather than A|undefined

Vastaus #1

lisää tämä rivi tsConfig-vaihtoehtoon

{
"compilerOptions":{
   //... something else
   "noUncheckedIndexedAccess": true
 }
}

https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/#checked-indexed-accesses-nouncheckedindexedaccess

https://www.typescriptlang.org/tsconfig#noUncheckedIndexedAccess

leikkikenttä