TLDR:游乐场再现
在我的应用程序中,我定义了多个表单模块,大致如下:
const firstModule = {
name: 'firstModule',
mutation: () => {
return (opts: {variables: {firstModuleArg: string}}) => {}
}
}
const secondModule = {
name: 'secondModule',
mutation: () => {
return (opts: {variables: {secondModuleArg: number}}) => {}
}
}
如您所见,每个突变函数都返回一个期望特定形状variables
字段的函数。
每个模块的使用直接工作得很好:
firstModule.mutation()({ variables: { firstModuleArg: 'test' } }); => ok
secondModule.mutation()({ variables: { secondModuleArg: 123 } }); => ok
但是,我还创建了这些表单的中央注册表,以便我可以从其他地方查找它们,如下所示:
const forms = {
firstModule,
secondModule
}
const getFormConfig = (root: 'firstModule' | 'secondModule') => {
const rootObj = forms[root];
return rootObj;
}
这就是问题所在。当我尝试引用组合表单对象的单个成员时,Typescript 似乎会自动创建variables
字段的交集并引发以下错误:
const { mutation: firstModuleMutation } = getFormConfig('firstModule');
firstModuleMutation()({ variables: { firstModuleArg: '1234' } });
我想我在这里遗漏了一些相当简单的东西,但希望能够深入了解如何获得理想的行为(当我专门检索 时firstModule
,我只希望它验证该模块中的 variables 字段)。如果我可以提供任何其他信息,请告诉我。
谢谢!