#reactjs #typescript
#reactjs #машинопись
Вопрос:
Я пытаюсь передать значение из дочернего компонента subject-section в родительский раздел. Однако интерфейс TypeScript не доволен этим. Я получаю сообщение об ошибке onUrlUpdate не существует в интерфейсе.
Итак, что я должен делать? Добавить onUrlUpdate?: string
в интерфейс. Но это может загрязнить мой интерфейс. Что, если мне нужно передать 5 функций родительскому элементу?
Интерфейс
export interface CourseSectionInterface {
id?: string;
title: string;
lessons: LessonsInterface[],
}
Родительский
<React.Fragment key={section.id}>
<SubjectSections
title={section.title}
lessons={section.lessons}
onUrlUpdate={changeVideo}
/>
</React.Fragment>
Дочерний
const SubjectSections: React.FC<CourseSectionInterface> = ({title, lessons, onUrlUpdate}) => {
const passUrl = (url: string) => {
onUrlUpdate(url);
}
return (
<h2 onClick={() => passUrl('url')}></h2>
)
}
Комментарии:
1. Если вы не хотите изменять этот интерфейс, почему бы просто не создать новый интерфейс, содержащий
CourseSectionInterface
функцию a, и использовать ее вместо этого.2. Возможно, но это противоречило бы принципу DRY. Я думаю, что просто обновить интерфейс было бы проще.
3. Это противоречило бы DRY только в том случае, если бы у вас были одинаковые свойства, включенные в оба интерфейса, если у вас есть интерфейс, содержащий другой интерфейс, типы не повторяются.
interface A { a: string }; interface B { a: A, b: () => void }
4. Я думаю, вы правы.