styled component typescript with code examples

Styled Components are a powerful tool that allows developers to write CSS using JavaScript code. With it, you can create styles that are encapsulated and reusable, and it is compatible with various frameworks and platforms. The beauty of using TypeScript with Styled Components is that you can ensure your styles are implemented flawlessly. In this article, we will explore Styled Components with TypeScript using code examples.

Creating a Styled Component

Let’s begin by creating a simple styled component. We are going to create a button component with a few styles and use TypeScript to define the type of the props.

import React from 'react';
import styled from 'styled-components';

interface ButtonProps {
  primary?: boolean;
  backgroundColor?: string;
  size?: 'small' | 'medium' | 'large';
  label: string;

const Button = styled.button<ButtonProps>`
  border: none;
  border-radius: 4px;
  padding: 10px 16px;
  font-size: 16px;
  font-weight: bold;
  background-color: ${props => props.backgroundColor ? props.backgroundColor : props.primary ? '#4caf50' : '#2196f3'};
  color: white;
  cursor: pointer;
  &:hover {
    opacity: 0.8;

export default Button;

In this example, we start by importing the necessary libraries to create a React component and a styled component. Next, we create an interface named buttonProps, which defines the properties that our component accepts. These include the primary color of the button, the background color, the size of the button, and the button label.

After defining the interface, we create our styled component using the styled.button notation. We pass in our interface as a generic to the button component. We then define all the styles that we want the element to have. We use a ternary operator to conditionally render the background color of the button based on the value passed through the props. Lastly, we export our component for use in other parts of our application.

Using the Styled Component

Now that we have our component, we can use it anywhere in our application by simply importing it. We can also pass in the necessary props to render the button as desired.

import React from 'react';
import Button from './components/Button';

const App = () => {
  return (
      <Button label="Primary" primary />
      <Button label="Green" backgroundColor="#8bc34a" />
      <Button label="Large" size="large" />

export default App;

In our app component, we import our Button component and render it thrice with different props. We pass the primary prop for the first button, which renders it with the primary color. The second button has a green background, passed through the backgroundColor prop, and the third one is larger, passed through the size prop.

Sharing Themes with Styled Components

Styled Components make it easy for developers to share themes across an application. We can define the colors and typography that we want to use in our application in a single file and reuse them throughout our components.

export const theme = {
  colors: {
    primary: '#2196f3',
    secondary: '#f44336',
    accent: '#673ab7',
  typography: {
    heading: {
      fontFamily: `'Montserrat', sans-serif`,
      fontWeight: 700,
      fontSize: '32px',
      lineHeight: '40px',
    body: {
      fontFamily: `'Open Sans', sans-serif`,
      fontWeight: 400,
      fontSize: '18px',
      lineHeight: '24px',

In this example, we define two objects in our theme object – colors and typography. We define three colors – primary, secondary, and accent – and the styles for our typography.

We can then use these values in our components by passing them as props to the styled component.

import styled from 'styled-components';
import { theme } from '../../theme';

export const Heading = styled.h1`
  font-family: ${theme.typography.heading.fontFamily};
  font-size: ${theme.typography.heading.fontSize};
  font-weight: ${theme.typography.heading.fontWeight};
  line-height: ${theme.typography.heading.lineHeight};
  color: ${theme.colors.primary};

export const BodyText = styled.p`
  font-family: ${theme.typography.body.fontFamily};
  font-size: ${theme.typography.body.fontSize};
  font-weight: ${theme.typography.body.fontWeight};
  line-height: ${theme.typography.body.lineHeight};
  color: ${theme.colors.secondary};

In this example, we import our theme object and define two styled components – Heading and BodyText. For the Heading component, we use the typography styles from our theme, and we set the color to the primary color defined in our theme. For our BodyText component, we use the typography styles from our theme, and we set the color to the secondary color defined in our theme.


Styled Components with TypeScript is a powerful combination that streamlines the creation and management of CSS styles. The benefits of using typescript in combination are immense; it helps check for mistakes in variables before implementation and overall enforces best practices. We explored how to create a simple styled component with TypeScript, how to use the component and how to share themes between components. With Styled Components and TypeScript, developers can create clean, concise, and reusable styles with confidence.

Creating a Styled Component

Creating a styled component can seem daunting at first, but it's a surprisingly straightforward process. While creating a styled component, we need to define the styles that should be applied to the component. Here, we used the styled.button notation to create a button component that inherits styles from the button element.

Next, we passed our buttonProps interface as a generic type to the component. We did this to ensure that TypeScript identifies the props accepted by our component. Lastly, we used interpolation to add the primary and background color styles based on the passed-in props.

Using the Styled Component

Once we've created our styled component, we can use it in our React application by importing it and passing the necessary props. In this example, we rendered our Button component three times with different props.

The first button rendered with the primary color, the second button with a custom background color, and the third button rendered as a larger button.

Sharing Themes with Styled Components

Sharing themes with styled components helps keep our application design consistent across all its components. We defined our theme in a separate file and imported it into our components. This strategy helps to prevent code duplication and ensures that style codes are consistent throughout.

In practice, we decided to split our theme into two objects – colors and typography. Doing so made our theme more readable and easy to modify.

We then defined two styled components using our theme, Heading, and BodyText. We passed in typography styles and the primary and secondary colors from the theme to the component styles.

Styled Components and TypeScript

TypeScript is a powerful tool when used in combination with styled components. While programming, whenever we pass props to a component, TypeScript identifies the type of props that should be passed to that component, preventing any mistakes before implementation. Additionally, TypeScript's type inference engine catches many mistakes that could be hard to spot in runtime.

In practice, Styled Components and TypeScript provide many benefits. They enable developers to create clean, concise, and reusable codes while enforcing best development practices. They also make maintaining, revising, and expanding application easier and quicker.


In conclusion, TypeScript with Styled Components make writing CSS in our React application less complex and more efficient. We gain the benefits of utilizing Typed programming, enabling us to find and prevent bugs faster, ultimately increasing our productivity. Additionally, sharing themes with Styled Components helps us maintain a consistent design style throughout our application.

Through this article, we learned how to create a simple styled component using TypeScript, how to use the styled component, and how to share themes between components. Any developer who wishes to make creating and managing CSS in their React application easier and more productive should learn how to utilize Styled Components with TypeScript.

Popular questions

  1. What are Styled Components?
    Styled Components is a library that allows developers to write CSS code using JavaScript. It is widely used to create encapsulated and reusable styles. It makes development more straightforward and more organized.

  2. Can we use TypeScript with Styled Components?
    Yes, we can use TypeScript with Styled Components to ensure that styles are implemented flawlessly. TypeScript helps catch bugs before implementation, making it a reliable development tool.

  3. How do we create a styled component using TypeScript?
    First, we define the styles that we want our component to inherit using the styled. notation. Next, we make use of TypeScript to define the type of props our component accepts. Lastly, we pass in props and interpolate values where necessary.

  4. How can we share themes using Styled Components and TypeScript?
    We can define a theme in a separate file and import it into our components. The theme can consist of objects that contain colors and typography styles, and we can reuse them throughout our components.

  5. What are the benefits of using TypeScript with Styled Components?
    Using TypeScript with Styled Components ensure our project's cohesion and consistency. TypeScript identifies the type of props that should be passed to a component, preventing mistakes before implementation. It provides a reliable bug-catching tool.



As a developer, I have experience in full-stack web application development, and I'm passionate about utilizing innovative design strategies and cutting-edge technologies to develop distributed web applications and services. My areas of interest extend to IoT, Blockchain, Cloud, and Virtualization technologies, and I have a proficiency in building efficient Cloud Native Big Data applications. Throughout my academic projects and industry experiences, I have worked with various programming languages such as Go, Python, Ruby, and Elixir/Erlang. My diverse skillset allows me to approach problems from different angles and implement effective solutions. Above all, I value the opportunity to learn and grow in a dynamic environment. I believe that the eagerness to learn is crucial in developing oneself, and I strive to work with the best in order to bring out the best in myself.
Posts created 3245

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top