Är det möjligt med TypeScript att få en lista över nycklar från ett objekt, som också är typat?
Jag har följande funktion:
function getFeature(key: string) { ... }
I min kod vill jag deklarera alla möjliga funktioner med en reservlösning som:
const FEATURES = {
'my-feature': {
fallback: true
},
'another-feature': {
fallback: false
}
}
Jag vill använda en typ för detta objekt, så fallback-egenskapen måste vara en boolean. Så jag skapade:
type FeatureMap = Record<string, { fallback: boolean}>
const FEATURES: FeatureMap = {
'my-feature': {
fallback: true
},
'another-feature': {
fallback: false
}
}
Nu vill jag ha listan över funktionstangenter, så jag måste tolka rätt funktionstangent i funktionen getFeature.
type FeatureMap = Record<string, { fallback: boolean}>
const FEATURES: FeatureMap = {
'my-feature': {
fallback: true
},
'another-feature': {
fallback: false
}
}
type FeatureKey = keyof typeof FEATURES;
function getFeature(key: FeatureKey) { ... }
Men nu förstår jag att key-argumentet i getFeature-funktionen bör vara en string och inte en av nycklarna i FEATURES. När jag tar bort FeatureMap-typen från const Features får jag alla namn, men då är inte fallback typad.
Finns det ett sätt att få det att fungera samtidigt?