javascript - Hur skriver man en underegenskap av ett nästlat objekt?


Jag vet att detta låter som en vanlig fråga, men jag kunde inte riktigt hitta ett svar online.

Anta att jag har följande objekt,

const myObject = {
    property: {
        subProperty: null
    },
}

Följande fungerar alldeles utmärkt:

const getValue = (): string => 'property'

const value = myObject[getValue() as keyof typeof myObject]

Men när jag försöker skriva subProperty-värdet får jag ett fel. Så här försöker jag skriva det:

const getValue = (): string => 'property'
const getSubValue = (): string => 'subProperty'

const value = myObject[getValue() as keyof typeof myObject]

const subValue = myObject[getValue() as keyof typeof myObject][getSubValue() as keyof typeof myObject[getValue() as keyof typeof myObject]]

Jag är medveten om att jag kan ändra de två metoderna till följande:

const getValue = (): 'property' => 'property'
const getSubValue = (): 'subProperty' => 'subProperty'

Detta kommer att fungera utan keyof typeof-indikatorn, men uppenbarligen behöver jag behålla returvärdet av de två funktionerna som string.

Svar #1

Det verkar som att TypeScript-parsaren inte kan hantera komplexiteten i uttrycket. Så om du använder en mellanliggande variabel kommer det att fungera:

const value = myObject[getValue() as keyof typeof myObject]
const subValue = value[getSubValue() as keyof typeof value]

Relaterade artiklar