Help

mail@pastecode.io avatar
unknown
tsx
7 months ago
1.1 kB
3
Indexable
Never
type ComponentVariants = "input" | "select" | "checkbox";

type ComponentInput = {
  typeElement: "input";
  elementsProps: {
    cat: string;
  };
};

type ComponentSelect = {
  typeElement: "select";
  elementsProps: {
    dog: string;
  };
};

type ComponentCheckbox = {
  typeElement: "checkbox";
  elementsProps: {
    fish: string;
  };
};

type OnlyElementsProps = (
  | ComponentInput
  | ComponentSelect
  | ComponentCheckbox
)["elementsProps"];

const GetComponent = ({
  variant,
  componentsProps,
}: {
  variant: ComponentVariants;
  componentsProps: OnlyElementsProps;
}) => {
  switch (variant) {
    case "input":
      return <Input {...componentsProps} />;
    case "checkbox":
      return <Checkbox {...componentsProps} />;
    case "select":
      return <Select {...componentsProps} />;
    default:
      return <div> null </div>;
  }
};

const Input = ({ cat }: { cat: string }) => <div>Input - {cat} </div>;
const Checkbox = ({ fish }: { fish: string }) => <div>Checkbox - {fish} </div>;
const Select = ({ dog }: { dog: string }) => <div>Select - {dog} </div>;