Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Reactjs 反应类型脚本联合类型_Reactjs_Typescript - Fatal编程技术网

Reactjs 反应类型脚本联合类型

Reactjs 反应类型脚本联合类型,reactjs,typescript,Reactjs,Typescript,我创建了一个卡片组件,它有两个变体:包装器和仪表板。每种变体都有不同的道具 export type DashboardProps = { variant: CardVariant.Dashboard, primaryText: string, secondaryText: string, icon: OverridableComponent<SvgIconTypeMap<{}, "svg">>, iconColor: string,

我创建了一个卡片组件,它有两个变体:包装器和仪表板。每种变体都有不同的道具

export type DashboardProps = {
  variant: CardVariant.Dashboard,
  primaryText: string,
  secondaryText: string,
  icon: OverridableComponent<SvgIconTypeMap<{}, "svg">>,
  iconColor: string,
}

export type WrapperProps = {
  variant: CardVariant.Wrapper,
  children: any,
}

export type Props = DashboardProps | WrapperProps;
唯一看起来不错的键是variant,我想这是因为这是两种类型中唯一的常用键

Card.tsx

export const Card = ({
  variant,
  primaryText,
  secondaryText,
  icon,
  iconColor,
  children,
}: Props) => {
  switch (variant) {
    case CardVariant.Wrapper:
      return <CardWrapper>{children}</CardWrapper>;
    case CardVariant.Dashboard:
      return (
        <CardDashboard
          primaryText={primaryText}
          secondaryText={secondaryText}
          icon={icon}
          iconColor={iconColor}
        />
      );

    default:
      return null;
  }
};
导出常量卡=({
变体,
primaryText,
第二文本,
偶像
iconColor,
儿童
}:道具)=>{
开关(变型){
case CardVariant.包装器:
返回{children};
case CardVariant.仪表板:
返回(
);
违约:
返回null;
}
};

做这件事最好的方法是什么?

你已经有了一个有区别的道具联合类型。那么这个呢

export const Card = (props: Props) => {
  switch (props.variant) {
    case CardVariant.Wrapper:
      return <CardWrapper>{props.children}</CardWrapper>;
    case CardVariant.Dashboard:
      return (
        <CardDashboard
          primaryText={props.primaryText}
          secondaryText={props.secondaryText}
          icon={props.icon}
          iconColor={props.iconColor}
        />
      );

    default:
      return null;
  }
};
export const Card=(道具:道具)=>{
开关(道具变型){
case CardVariant.包装器:
返回{props.children};
case CardVariant.仪表板:
返回(
);
违约:
返回null;
}
};

使用某种方法。这就解决了它!非常感谢。
export const Card = (props: Props) => {
  switch (props.variant) {
    case CardVariant.Wrapper:
      return <CardWrapper>{props.children}</CardWrapper>;
    case CardVariant.Dashboard:
      return (
        <CardDashboard
          primaryText={props.primaryText}
          secondaryText={props.secondaryText}
          icon={props.icon}
          iconColor={props.iconColor}
        />
      );

    default:
      return null;
  }
};