Reactjs 反应+;typescript:InferProps for propTypes.elementType抛出错误:JSX元素类型';组件';没有任何构造或调用签名
我正在尝试将proptypes与proptypes一起使用。elementType: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
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会在错误类型实际传递到组件时发出警告,例如,后端提供的数据与预期形状不匹配时。