typescript - Hva betyr typen { [x: string]: any }?


Jeg leste denne artikkelen, og jeg kan ikke forstå signaturen:

type FuncWithOneObjectArgument<P extends { [x: string]: any }, R> = (props: P) => R;

Hva betyr { [x: string]: any}? Jeg antar at det er et ordbok-objekt med verdier av typen any og nøkler av... hva? Liste? Av strenger?! Hva betyr x? Jeg prøvde å fjerne x, men det fører til syntaksfeil... Hvordan leser man typen?

Svar #1

Det definerer hva nøklene til objektet ditt kan være. I ditt tilfelle kan nøklene dine bare være av typen string. Og verdiene dine kan være hva som helst.

Årsaken bak dette er at du i TypeScript kan definere et objekt til å ha en viss egenskap :

type obj = {property1: string, property2: any};

Dette skaper en type objekt som MÅ ha begge egenskaper for å være gyldig.

På grunn av det finnes det ingen intuitiv måte å definere nøkkeltype på. Derfor bruker vi firkantede parenteser.

type obj = {[keys: string]: any};

For typer som string og int virker det åpenbart meningsløst, men du kan bruke unionstypeoperatoren for å definere hva nøklene dine kan være :

type obj = {[keys in 'key1'|'key2'|'key3']: any};

Denne syntaksen sier at nøklene dine kun kan være key1, key2 eller key3.

Relaterte artikler