Reactjs 反应+;typescript:InferProps for propTypes.elementType抛出错误:JSX元素类型';组件';没有任何构造或调用签名

Reactjs 反应+;typescript:InferProps for propTypes.elementType抛出错误:JSX元素类型';组件';没有任何构造或调用签名,reactjs,typescript,Reactjs,Typescript,我正在尝试将proptypes与proptypes一起使用。elementType: import * as React from 'react' import propTypes, { InferProps }from 'prop-types' const MyComponentPropTypes = { component: propTypes.elementType, } const MyComponent = ({ component: Component }: In

我正在尝试将proptypes与proptypes一起使用。elementType:

import * as React from 'react'
import propTypes, { InferProps }from 'prop-types'

const MyComponentPropTypes = {
    component: propTypes.elementType,
}

const MyComponent = ({
    component: Component
}: InferProps<typeof MyComponentPropTypes>) => {
    return (
        <Component />
    )
}
import*作为来自“React”的React
从“属性类型”导入属性类型,{InferProps}
常量MyComponentPropTypes={
组件:propTypes.elementType,
}
常量MyComponent=({
组件:组件
}:InferProps)=>{
返回(
)
}
但我得到:

错误:(12,4)TS2604:JSX元素类型“Component”没有任何构造或调用签名

我尝试了文档中所有的propType值,唯一有效的是
propTypes.any


InferProps
切换到
{component:React.ComponentType}
也可以正常工作,但我希望
InferProps
能够正常工作。如何做到这一点?

我也遇到了同样的问题,经过几个小时的努力,我找到了解决方案,您必须添加到您的propType isRequired中

所以你的解决办法就是改变

组件:propTypes.elementType in

组件:propTypes.elementType.isRequired

为什么要添加isRequired?因为null或undefined不能被实例化或执行任何调用。即使是错误类型也会告诉您“没有任何构造或调用签名”。您可以查看是否悬停而不添加编译器所需的isRequired,因为它可以具有正确的null或未定义值


希望这能解决其他人的问题。

嗯,我想我从来没有见过与TypeScript一起使用的
道具类型
,因为TS为您提供了所需的所有类型安全性。也许我遗漏了什么:为什么两者都用?这是正确的。typescript不需要道具类型,因为typescript不进行运行时检查。propTypes会在错误类型实际传递到组件时发出警告,例如,后端提供的数据与预期形状不匹配时。