How to use set types on React useState with TypeScript

Are you trying force a state variable to be certain type with React.useState?

In today’s short article, I will go over how to define your useState hook with TypeScript.

The solution


interface PersonProps {
  name: string;
  age: number;
  hobbies: Array<string>;
  isCool: boolean;
}

// Boolean type
const [isCool] = React.useState<boolean>(true);

// String type
const [name] = React.useState<string>('Ruben');

// Number type
const [age] = React.useState<number>(28);

// Null or undefined
const [random] = React.useState<null | undefined>();

// Array of string 
const [hobbies] = React.useState<Array<string>>(['soccer', 'cooking', 'code']);

// Custom interface
const [person] = React.useState<PersonProps>({
  isCool,
  name,
  age,
  hobbies
});

Let’s go over it really quickly.

To define a type for React.useState() you must add a <type> after typing the word useState and before the opening parenthesis.

This will tell TypeScript that you’re giving a specific type to state property variable.

This is good because it will reduce silly dev mistakes, and keep your code more consistent throughout the apps life.

Let’s take a look at what happens if I try to against the type definition for one of the React.useState variables.


const [isCool, setIsCool] = React.useState<boolean>(true);

setIsCool('false');

In the example above, I’m trying to set isCool to 'false' but in a string type, when I’ve specifically defined it to be a boolean.

If I try to save this, my application will break and print out the error message.


Argument of type '"false"' is not assignable to parameter of type 'SetStateAction<boolean>'.

I like to tweet about TypeScript and React and post helpful code snippets. Follow me there if you would like some too!