Я создаю пользовательский компонент и хочу передать имя элемента в качестве реквизита для компонента, например div
или p
; HTMLElement
Загвоздка в том, что это должен быть блочный или встроенный элемент.
export const MyComponent = props => {
const currentNode = useRef()
const { tag: Comp } = props
return <Comp ref = {currentNode}>Strawberry Kisses!</Comp>
}
Как видите, я разрушаю структуру prop
, чтобы получить значение tag
(Component
) и передаю его как элемент.
В настоящее время интерфейс ниже выдает ошибку
Type '{ ref: MutableRefObject<undefined>; }' is not assignable to type 'IntrinsicAttributes'.
Property 'ref' does not exist on type 'IntrinsicAttributes'.ts(2322)
interface MyProps extends React.ClassAttributes<MyComponent> {
tag: string;
}
Мне нужно в основном проверить if (tag == HTMLElement && tag === JSX.IntrinsicElements) { return 'this is the correct type and allow it' }
Любая помощь в направлении приветствуется.
Ваша ошибка не имеет ничего общего с вашим вопросом, насколько я могу судить.
Чтобы исправить вашу ошибку, вам нужно сделать <Comp ref = {currentNode.current}>
Следующая ошибка, с которой вы, вероятно, столкнетесь, заключается в том, что вы не передаете свойство тега своему дочернему компоненту.
Чтобы на самом деле ответить на ваш вопрос, я не думаю, что существует какое-либо встроенное перечисление или тип всех имен тегов HTML, поэтому вам придется определить его самостоятельно, тем более что кажется, что вы хотите что-то еще более конкретное.
Недавно я посмотрел, и я думаю, что теория перечисления верна. Они используют
enum
в исходных файлах реакции, поэтому мне придется составить список самому. Спасибо, шаг в правильном направлении.