Я хотел бы разрешить только определенные компоненты в качестве детей. Например, скажем, у меня есть компонент Menu, который должен содержать только MenuItem
в качестве дочерних элементов, например:
<Menu>
<MenuItem />
<MenuItem />
</Menu>
Поэтому я хотел бы, чтобы Typescript выдавал мне ошибку в среде IDE, когда я пытаюсь сделать другой компонент дочерним. Что-то предупреждает меня, что я должен использовать MenuItem
только как дети. Например, в этой ситуации:
<Menu>
<div>My item</div>
<div>My item</div>
</Menu>
Эта ветка почти аналогична, но не включает решение TypeScript. Мне было интересно, можно ли решить эту проблему с помощью типов и интерфейсов TypeScript. В моем воображаемом мире это выглядело бы так, но, конечно, проверка типов не работает, потому что дочерний компонент имеет тип Element
:
type MenuItemType = typeof MenuItem;
interface IMenu {
children: MenuItemType[];
}
const MenuItem: React.FunctionComponent<IMenuItem> = ({ props }) => {
return (...)
}
const Menu: React.FunctionComponent<IMenu> = ({ props }) => {
return (
<nav>
{props.children}
</nav>
)
}
const App: React.FunctionComponent<IApp> = ({ props }) => {
return (
<Menu>
<MenuItem />
<MenuItem />
</Menu>
)
}
Есть ли способ добиться этого с помощью Typescript? Хотите расширить тип элемента чем-то, относящимся только к определенному компоненту?
Или что было бы хорошим подходом к тому, чтобы быть уверенным, что дочерний элемент является экземпляром определенного компонента? Без необходимости добавлять условие, которое смотрит на дочерний компонент displayName.