Set types on useState React Hook with TypeScript Set types on useState React Hook with TypeScript typescript typescript

Set types on useState React Hook with TypeScript


Use this

const [user, setUser] = useState<IUser>({name: 'Jon'});

See the Corresponding Type in DefinitelyTyped


First useState takes a generic, which will be your IUser. If you then want to pass around the second destructured element that is returned by useState you will need to import Dispatch. Consider this extended version of your example that has a click handler:

import React, { useState, Dispatch } from 'react';interface IUser {  name: string;}export const yourComponent = (setUser: Dispatch<IUser>) => {    const [user, setUser] = useState<IUser>({name: 'Jon'});    const clickHander = (stateSetter: Dispatch<IUser>) => {        stateSetter({name : 'Jane'});    }    return (         <div>            <button onClick={() => { clickHander(setUser) }}>Change Name</button>        </div>    ) }

See this answer.


You could also declare the initial state before and then be able to call it any time you want:

type User = typeof initUser;const initUser = {name: 'Jon'}...const [user, setUser] = useState<User>(initUser);

About I interface prefixes: https://basarat.gitbooks.io/typescript/content/docs/styleguide/styleguide.html#interface