genéricos - Tipo de unión parcial en Typescript
Me está resultando difícil averiguar cómo escribir algo así:
type WithFallback<Fallback extends string, FallbackType> = {
[fallback in Fallback]: FallbackType
} & { [rest: string]: Partial<FallbackType> };
Entonces, generalmente, este tipo toma una clave Fallback y su tipo de valor FallbackType, y crea un diccionario de un par clave-valor {[key: Fallback]: FallbackType} y cualquier otra clave con valores del tipo Partial<FallbackType>.
Debería comportarse como un diccionario con valores de respaldo (base) y sus variaciones:
const values = {
base: {
valueA: "baseA",
valueB: "baseB",
},
context1: {
valueA: "context1A",
},
context2: {
valueB: "context2B",
},
};
const useContextValues = <BaseContext extends string, BaseValuesDictionary>(
base: BaseContext,
values: WithFallback<BaseContext, BaseValuesDictionary>,
): BaseValuesDictionary => {
const [activeContext, setContext] = useState<keyof typeof values>(base);
const context = { ...values[base], ...values[activeContext] };
return context;
};
De esta manera, en el contexto base nuestros valores deberían ser iguales a baseA y baseB, en context1 - contest1A y baseB, en context2 - baseA y context2B.
Pero, cuando espero que useContextValues devuelva typeof values.base={valueA: string, valueB: string}, se resuelve en esto:
Además, cuando los valores se pasan de esta manera, se resuelven a un tipo diferente:
¿Puedo arreglarlo de alguna manera? ¿O tal vez no se supone que funcione en absoluto?

