typescript - Definiera nästlade egenskaper via TS
ha ett sådant objekt:
const countrySize = {
"af":{
"name":"Afghanistan",
"shoeSizeLocale":"EU/IT"
},
"al":{
"name":"Albania",
"shoeSizeLocale":"AU"
},
"dz":{
"name":"Algeria",
"shoeSizeLocale":"EU/IT"
},
"ar":{
"name":"Argentina",
"shoeSizeLocale":"US/CA"
},
...
}
hur kan jag få typen av shoeSizeLocale att bli så här: type ShoeLocale="EU/IT" | "US/CA" | "AU"
Jag försökte göra så
type CountryCodes = typeof countrySize;
type CountryCodesKeys = keyof CountryCodes;
type ShoeLocale = CountryCodes[CountryCodesKeys]["name"];
men det fungerar inte. Typen i det här fallet är string
Svar #1
Du bör bara lägga till as const-påståendet för att låta TypeScript veta att objektet inte kommer att förändras:
const countrySize = {
af: {
name: 'Afghanistan',
shoeSizeLocale: 'EU/IT',
},
al: {
name: 'Albania',
shoeSizeLocale: 'AU',
},
dz: {
name: 'Algeria',
shoeSizeLocale: 'EU/IT',
},
ar: {
name: 'Argentina',
shoeSizeLocale: 'US/CA',
},
} as const;
Då kommer dina typer att vara som förväntat. Och för att lägga till type ShoeSizeLocale="EU/IT" | "US/CA" | "AU" kan du bara göra följande:
type ShoeSizeLocal = CountryCodes[CountryCodesKeys]['shoeSizeLocale'];
lekplats
