reactjs - 使用变量类型反应 Typescript 组件(来自道具)
问题描述
我想创建一个从 props 和 children 接受其类型(例如'div'、'span')并呈现它们的组件,该组件还支持 ref 转发和 className prop。
问题是我遇到了一个错误'className' does not exist on type 'IntrinsicAttributes
,并且无法弄清楚是什么原因造成的。
我尝试将我提供的类型更改为forwardRef
不同HTMLElement
的类型,搜索类似的组件,但它没有什么帮助。
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
预期结果:没有 Typescript 错误。
实际结果:一行出现如下错误<Component className={className} ref={ref} {...otherProps}>
TS2322: Type '{ children: ReactChildren | (ReactChildren & string) | (ReactChildren & number) | (ReactChildren & false) | (ReactChildren & true) | (ReactChildren & ReactElement<any, string | ((props: any) => ReactElement<...> | null) | (new (props: any) => Component<...>)>) | (ReactChildren & ReactNodeArray) | (ReactChildren & Re...' is not assignable to type 'IntrinsicAttributes & { children?: ReactNode; }'.
Property 'className' does not exist on type 'IntrinsicAttributes & { children?: ReactNode; }'.
解决方案
推荐阅读
- android - Flutter - 如何根据List中的ID统计数据
- python - Tkinter .geometry() 没有调整窗口大小
- clojure - 在 clojure 宏中调用特殊形式 `set!`
- mysql - 如何从一个表中选择列,其中 id 在另一表的 JSON 列中
- visual-c++ - 没有为 DLL 加载资源文件
- sql - 如何通过两列复合键的任一排列对行进行分组
- testing - 如何测试 JUnit Jupiter (JUnit 5) 扩展
- jquery - 将两种不同的 CSS 样式应用于两个不同的数据表?
- laravel-backpack - 如何在 Laravel-Backpack 中添加自定义 JavaScript
- struct - 如何以编程方式获取结构的字段数?