#typescript
Вопрос:
Любая помощь в этом была бы признательна
interface Error {
messages: string[];
entity: 'test' | null;
}
interface GroupedErrors {
[errorGroup: string]: Error['messages'] | Error[];
}
interface UngroupedErrors {
ungrouped: Error[];
}
type GroupErrors = GroupedErrors | UngroupedErrors | {};
interface Preset {
errors: Error[];
}
export function groupPresetErrors(preset: Preset): GroupErrors {
return preset.errors.reduce<GroupErrors>((acc, error) => {
if (error.entity === 'test') {
return {
...acc,
['test']: acc['test']
? [...acc['test'], ...error.messages]
: error.messages,
};
}
return {
...acc,
['ungrouped']: acc['ungrouped'] ? [...acc['ungrouped'], error] : [error],
};
}, {});
}
Элемент неявно имеет тип»любой», потому что выражение типа»тест» нельзя использовать для индексирования типа «Групповые значения».
Свойство «тест» не существует для типа «Групповые».
Комментарии:
1. Ошибка верна; тип вашего аккумулятора
GroupErrors
, как известно, не имеетtest
свойства, поэтому вы не можете безопасно получить к нему доступ. Возможно, вы хотите , чтобы вместо этого ваш аккумулятор был типовымGroupedErrors
или чем-то еще более конкретным, например{[k: string]: string[]}
, как в этом исправлении ? Поскольку ваш вопрос-это просто какой-то код и сообщение об ошибке, мне трудно быть уверенным, в чем именно заключается цель. Если мое предложенное выше исправление не сработает для вас, не могли бы вы уточнить? В противном случае я с удовольствием напишу ответ.2. @jcalz Почему возникает ошибка iti, если
GroupErrors
может бытьGroupedErrors
, которая принимает любой строковый ключ (через[errorGroup: string]
?3.
GroupErrors
является типом объединения, и вы можете безопасно получить доступ только к свойствам объединения, которые, как известно, присутствуют во всех членах объединения. Посколькуtest
неизвестно , присутствует ли в{}
, вы не можете получить доступ кtest
свойствуGroupErrors
. Итак, как нам следует действовать здесь? Не могли бы вы отредактировать текст вопроса, чтобы описать, в чем заключается ваша проблема и какая помощь вам нужна? Или я могу предположить, что вышеупомянутое исправление сработает для вас, и просто дать ответ на этот вопрос?4. @jcalz Я понимаю, что это тип союза it’а, но не должен ли десятник
acc['test'] ?
адресовать это?5. @jcalz Мне нужно
groupPresetErrors
иметь возможность вернутьсяGroupErrors
, потому что он может вернуться{}