What does TS2339 Property does not exist on type mean in TypeScript?

Updated October 2026 · How we answer

Short answerTS2339 means the TypeScript compiler cannot find the property you are using on the type it knows for that value. Add the property to the type, narrow the type, or fix a misspelled name.

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.
From our shopsCaseMorph: Type an idea, see a custom phone case in seconds, then print a one-of-one.