Search code examples
reactjstypescriptmaterial-uistyled-components

MUI styled cannot pass component prop to Typography in typescript


Using MUI with typescript and want to use styled from MUI as well. When passing the component prop to the styled component I get an error from the typescript sandbox below, maybe anyone knows a workaround.

https://codesandbox.io/s/material-demo-forked-lxdrj?file=/demo.tsx


Solution

  • You have to manually add the 'component' prop.

    From https://mui.com/material-ui/guides/typescript/#complications-with-the-component-prop

    import React from "react";
    import type { TypographyProps } from "@material-ui/core";
    import { styled } from "@material-ui/core/styles";
    import Typography from "@material-ui/core/Typography";
    
    type MyT = React.ComponentType<TypographyProps<"span", { component: "span" }>>;
    
    const MyTypography: MyT = styled(Typography)({
      background: "linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)",
      border: 0,
      borderRadius: 3,
      boxShadow: "0 3px 5px 2px rgba(255, 105, 135, .3)",
      color: "white",
      height: 48,
      padding: "0 30px"
    });
    
    export default function StyledComponents() {
      return (
        <MyTypography component="span">Styled with styled-components API</MyTypography>
      );
    }