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},它会解析为:
此外,当以这种方式传递值时,它会解析为不同的类型:
我能以某种方式修复它吗?或者它根本不应该工作?