What is excess property checking in TypeScript?
Why Interviewers Ask This
This is a differentiating question used for senior and lead roles. Interviewers want to see if you can explain not just what happens, but why — and what the trade-offs are in different approaches.
Answer
Excess property checking is a special TypeScript behavior where it raises an error when you assign an object literal directly to a typed variable if the literal has properties that the type does not declare. Example: interface Point { x: number; y: number; } const p: Point = { x: 1, y: 2, z: 3 }; — TypeScript reports an error because z is not in Point. This seems to contradict structural typing (a type with x, y, z is structurally compatible with Point which only requires x and y). The difference: excess property checking only applies to object literal assignments, not to variable-to-variable assignments: const obj = { x: 1, y: 2, z: 3 }; const p: Point = obj; — no error, because obj is not a fresh literal. This is intentional — when you write a literal directly against a type, you almost certainly made a typo if you included extra properties. Bypass excess checking by using an intermediate variable or a type assertion. Excess property checking also applies to function arguments that are object literals.
Pro Tip
Before answering, structure your response: one-line definition → real-world analogy → concrete example from a project. This makes even complex TypeScript answers easy to follow.
Previous
What is the difference between interface and abstract class?
Next
What is the template literal type key remapping in TypeScript?
More TypeScript Questions
View all →- Advanced What is structural typing in TypeScript?
- Advanced What are branded types (opaque types) in TypeScript?
- Advanced What is the Variance annotation in TypeScript 4.7?
- Advanced What is the satisfies operator used for in TypeScript?
- Advanced How do you implement a deep partial type in TypeScript?