#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; }'.