Typescript 部分联合类型

use*_*698 5 generics typescript

我很难弄清楚如何输入这样的东西:

type WithFallback<Fallback extends string, FallbackType> = {
  [fallback in Fallback]: FallbackType
} & { [rest: string]: Partial<FallbackType> };
Run Code Online (Sandbox Code Playgroud)

所以,一般来说,这种类型接受一个键Fallback和它的值类型FallbackType,并创建一个键值对{[key: Fallback]: FallbackType}和任何其他具有类型值的键的字典Partial<FallbackType>。

它应该表现得像一个带有后备(基础)值及其变体的字典:

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;
};
Run Code Online (Sandbox Code Playgroud)

这样在base上下文中,我们的值应该等于baseAand baseB、in context1- contest1Aand baseB、in context2- baseAand context2B。

但是,当我希望useContextValues返回typeof values.base= 时{valueA: string, valueB: string},它会解析为:

在此处输入图片说明

此外,当以这种方式传递值时,它会解析为不同的类型:

在此处输入图片说明

我能以某种方式修复它吗?或者它根本不应该工作?