TypeScript - Mappa nyckeltyp med värdetyp i funktionssignatur baserat på ett typobjekt
Föreställ dig att ha en typmappning som denna:
type MyTypeMapping = {
Key1: Type1;
Key2: Type2;
};
och en funktion som denna:
const getVal = (key: keyof MyTypeMapping) => {
return getObjectFromStorage(key)
}
Den förväntade returtypen för funktionen getVal måste följa från det angivna nyckelvärdet. Så om key === Key1 måste den förväntade returtypen vara Type1.
Och för en nära relaterad fråga, föreställ dig om det finns en funktion:
const setVal = (key: keyof MyTypeMapping, val: T) => {
return setObjectInStorage(key, val)
}
Hur gör du typen av argumentet val beroende av typen av argumentet key? Så om key === Key2, måste den förväntade typen av val vara Type2.
Svar #1
Du kan använda en härledd generell typ för det.
const getVal = <K extends keyof MyTypeMapping>(key: K): MyTypeMapping[K] => {
return getObjectFromStorage(key) as MyTypeMapping[K];
};
const setVal = <K extends keyof MyTypeMapping>(key: K, val: MyTypeMapping[K]) => {
return setObjectInStorage(key);
};
