Компонент React Typescript с переменным типом (из реквизита)

#reactjs #typescript #ref

#reactjs ( реакция ) #машинописный текст #ссылка #reactjs #typescript

Вопрос:

Я хочу создать компонент, который принимает свой тип (например, ‘div’, ‘span’) из реквизита и дочерних элементов и отображает их, компонент также поддерживает перенаправление ссылок и реквизит className.

Проблема в том, что я получаю ошибку 'className' does not exist on type 'IntrinsicAttributes и не могу понять, что ее вызывает.

Я попытался изменить типы, которые я предоставляю forwardRef с HTMLElement , на другие, поискал похожие компоненты в Google, но это мало помогло.

Когда я меняю, HTMLElement например, HTMLDivElement , и меняю <Component ...> на <div ...> , эта ошибка исчезает. Так что проблема, вероятно, в неправильном типе ( HTMLElement )

Вот код компонента:

 import React, { ReactChildren, ComponentType } from "react"

interface MyComponentProps {
  children: ReactChildren
  component: string | ComponentType
  className: string
}

const MyComponent = React.forwardRef<HTMLElement, MyComponentProps>(
  (props, ref) => {
    const { children, className, component: Component, ...otherProps } = props

    return (
      <Component className={className} ref={ref} {...otherProps}>
        {children}
      </Component>
    )
  },
)

MyComponent.defaultProps = {
  component: "div",
}

export default MyComponent

  

Ожидаемый результат: ошибок машинописного текста нет.

Фактический результат: в строке появляется следующая ошибка <Component className={className} ref={ref} {...otherProps}>

 TS2322: Type '{ children: ReactChildren | (ReactChildren amp; string) | (ReactChildren amp; number) | (ReactChildren amp; false) | (ReactChildren amp; true) | (ReactChildren amp; ReactElement<any, string | ((props: any) => ReactElement<...> | null) | (new (props: any) => Component<...>)>) | (ReactChildren amp; ReactNodeArray) | (ReactChildren amp; Re...' is not assignable to type 'IntrinsicAttributes amp; { children?: ReactNode; }'.
  Property 'className' does not exist on type 'IntrinsicAttributes amp; { children?: ReactNode; }'.