• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Understanding the "Object Literal May Only Specify Known Properties" Error in React + TypeScript

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Understanding the "Object Literal May Only Specify Known Properties" Error in React + TypeScript


When working with useState and TypeScript in a React project, you might encounter this confusing TypeScript error:

Object literal may only specify known properties, and 'uid' does not exist in type '(prevState: undefined) => undefined'.ts(2353)
Let’s unpack this error, why it happens, and how to properly fix it while demonstrating best practices in state typing using a real-world example.

Problem Overview


Consider the following component:


import { useState } from "react";

export const User = () => {
const [user, setUser] = useState();

const login = () => {
setUser({
uid: 'ABC123',
name: 'Fernando'
});
}

return (
<div className="mt-5">
<h3>User: useState</h3>
<button className="btn btn-outline-primary">Login</button>
</div>
)
}

When you run this, you might get an error like:


Object literal may only specify known properties, and 'uid' does not exist in type '(prevState: undefined) => undefined'.

Why?

Root Cause


The issue is simple: you did not define a type for the user state. TypeScript assumes useState() holds undefined, so when you try to set it with an object, it complains:

“I don’t know what uid or name is supposed to be.”
Solution: Define a Type or Interface


interface User {
uid: string;
name: string;
}

export const UserComponent = () => {
const [user, setUser] = useState<User | null>(null);

const login = () => {
setUser({
uid: 'ABC123',
name: 'Fernando'
});
}

return (
<div className="mt-5">
<h3>User: useState</h3>
<button className="btn btn-outline-primary" onClick={login}>Login</button>

{user && (
<pre>{JSON.stringify(user, null, 2)}</pre>
)}
</div>
)
}
What’s Happening Behind the Scenes?


When you write useState(), TypeScript infers the type from the initial value. If no value is passed, the type is undefined.

But when you provide a generic, like useState<User | null>(null), TypeScript now expects an object with uid and name fields, or null.

This enables:

  • Autocompletion
  • Type safety
  • Better debugging
Why It Matters


React + TypeScript is powerful, but only when used correctly:

Without TypingWith Typing (User - null)
Error-proneType-safe and predictable
No autocompletionFull IntelliSense for user.uid
Can pass anything to setUser Only valid User objects or null
Best Practices for useState with Objects

TipDescription
Always type your stateEspecially when managing complex structures
Use - null for optional statesMakes checks like if (user) safe
Prefer interfaces for clarityDefine interface User to keep types reusable
Validate before renderingUse conditional rendering with optional values
Conclusion


This TypeScript error isn’t just noise—it’s a clue to improve your code's safety and structure. By defining a proper type for your state, you unlock the full power of React + TypeScript.

Don’t let the compiler scare you—embrace types, and make your components clean, robust, and production-ready.

Tags: react typescript useState frontend state-management errors


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу