@Hackerbot1488

Как преобразовать строку в тег?

Псевдокод:
interface listProps {
  tag: string;
  children: React.ReactNode;
}
export const List: React.FC<listProps> = ({ tag: Tag, children }) => {
  return (
    <Tag className="some-class">{children}</Tag>
  )
}

В js можно спокойно так сделать, ts ругается: "Тип "{ children: ReactNode; className: any; }" не может быть назначен для типа "IntrinsicAttributes".
Свойство "children" не существует в типе "IntrinsicAttributes".ts(2322)"
Как можно решить эту проблему, не меняя расширение файла на jsx?
  • Вопрос задан
  • 944 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега HTML
Crazy on performance...
Придется без tsx такую магию делать
import React from 'react';
export const Tag: React.FC<{
  tag: string;
  [prop: string]: any;
}> = ({children, tag, ...props}) => React.createElement(tag, props, children);


Так же для ограничения имени тэга можно использовать тип keyof HTMLElementTagNameMap
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
children автоматом есть при использовании React.FC, поэтому достаточно сделать так:
interface listProps {
  tag: React.ComponentType;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы