TLDR: Playground Repro
В моем приложении я определяю несколько модулей формы, которые выглядят примерно так:
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
, я хочу, чтобы он только проверял поле переменных из этого модуля).Пожалуйста, дайте мне знать, если есть какая-либо другая информация, которую я могу предоставить.
Спасибо!