Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript-动态扩展接口_Javascript_Reactjs_Typescript_React Native - Fatal编程技术网

Javascript Typescript-动态扩展接口

Javascript Typescript-动态扩展接口,javascript,reactjs,typescript,react-native,Javascript,Reactjs,Typescript,React Native,我正在尝试使用以下道具键入现有的React本机模块: useComponent1: boolean useComponent2: boolean 通过以下实现 render(){ if(useComponent1){ return <Component1 {...props}/> } if(useComponent2){ return <Component2 {...props}/> } } rende

我正在尝试使用以下道具键入现有的React本机模块:

useComponent1: boolean
useComponent2: boolean
通过以下实现

render(){
    if(useComponent1){
        return <Component1 {...props}/>
    }

    if(useComponent2){
        return <Component2 {...props}/>
    }
}
render(){
如果(使用组件1){
返回
}
如果(使用组件2){
返回
}
}
我有一个组件1和2的接口,但是,我不能同时扩展这两个接口,因为道具取决于使用哪个组件

可以动态扩展接口吗


如果没有,是否有其他解决方案?

可能存在交叉点/联合类型:

interface Component1Props { .... }
interface Component2Props { .... }
interface WrapperOwnProps {
  useComponent1: boolean
  useComponent2: boolean
}
type WrapperProps = WrapperOwnProps & (Component1Props | Component2Props);
道具类型可以另外断言:

class Wrapper extends Component<WrapperProps> {
  render(){
    const { useComponent1, useComponent2, ...props } = this.props;
    if(useComponent1){
      return <Component1 {...props as Component1Props}/>
    }

    if(useComponent2){
      return <Component2 {...props as Component2Props}/>
    }
  }
}
类包装器扩展组件{
render(){
const{useComponent1,useComponent2,…props}=this.props;
如果(使用组件1){
返回
}
如果(使用组件2){
返回
}
}
}