What does TS2339 Property does not exist on type mean in TypeScript?
What the compiler is checking
TypeScript checks property access against the type declared or inferred for a value. If you access user.email but the type only defines name and id, the compiler reports TS2339. The error is a safety check, not a runtime crash, but it often points to a real mismatch in the data.
The problem is common with objects from JSON, union types, and values that were typed too broadly. Hovering over the variable in your editor shows the type TypeScript thinks it has, which is the fastest way to see the gap.
- Hover over the variable to see its inferred type
- Check the spelling of the property name
- Confirm the data shape from the API or file
How to fix it
Add the missing property to your interface or type definition if the data really has it. If the property only exists in some cases, use a union type and narrow it with an in check or a type guard before reading it.
Avoid casting with as any to silence the error, since that hides the mismatch. A typed interface makes the code easier to maintain and catches similar bugs earlier.
Common mistakes
- Using any or type assertions to make the error disappear.
- Declaring the type too narrowly and then adding properties later without updating it.

Related questions
- What does TypeError: unsupported operand type(s) mean in Python?
- How do I fix cannot convert string to int in Java?
- What does undefined is not a function mean in JavaScript?
- Why do I get a type mismatch error in C++?
- What does incompatible types: possible lossy conversion mean in Java?
- How do I fix an implicit conversion error in C#?