Reactjs 将reactype与JSX一起使用

Reactjs 将reactype与JSX一起使用,reactjs,typescript,react-jsx,Reactjs,Typescript,React Jsx,我有一个关于JSX和Typescript集成的问题。给定以下代码: interface Props { component?: React.ReactType } class MyComponent extends React.Component<Props, void> { render() { var Comp = this.props.component return (<Comp></Comp>) }

我有一个关于JSX和Typescript集成的问题。给定以下代码:

interface Props {
    component?: React.ReactType
}

class MyComponent extends React.Component<Props, void> {
    render() {
      var Comp = this.props.component
      return (<Comp></Comp>)
    }
}
界面道具{
组件?:React.ReactType
}
类MyComponent扩展了React.Component{
render(){
var Comp=此.props.component
返回()
}
}
我得到:
JSX元素类型“Comp”没有任何构造或调用签名。


我该如何解决这个问题?类似的代码在Javascript中运行良好,其中
component
具有prop validator
elementType
from,因此它可以是字符串或组件类。

如果您查看类型中react类型的定义,您会发现有一个由3种不同类型组成的联合类型,其中一种是字符串。这就是为什么你有这样的问题。尝试将React.ReactType替换为React.ComponentClass。

如何创建要传递的组件?如果您这样创建,它应该可以工作:

接口MyProps{
组件?:React.ReactType;
}
类TestComponent扩展了React.Component{
render(){
回归试验;
}
}
类MyComponent扩展了React.Component{
render(){
const Comp=this.props.component
返回();
}
}
类父类扩展了React.Component{
render(){
返回(
)
}
}

您也可以将html元素作为字符串(例如“div”)传递,但我不确定您是否希望这样做。

但我也需要字符串,它在react javascript中是允许的。@user3250645那么您不应该使用typescript。有很多正确的程序你不能输入。这是一种权衡,你失去了一些表达的自由,但获得了更多的安全。这个问题与打字作为一种语言无关。显然,它的类型系统足够灵活,可以表达所需的内容(即ReactType)。问题是typescript中的JSX解析器需要JSX.Element类,我不知道ReactType(可能意味着简单字符串)和JSX.Element(需要React.Component)之间如何桥接。我相信这是可能的。