Bird
Raised Fist0
Typescriptprogramming~5 mins

Excess property checks vs structural compatibility in Typescript - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What are excess property checks in TypeScript?
Excess property checks happen when you assign an object literal to a variable or parameter with a specific type, and TypeScript warns if the object has extra properties not defined in that type.
Click to reveal answer
beginner
Explain structural compatibility in TypeScript.
Structural compatibility means TypeScript compares the shape (properties and types) of two types to decide if one can be assigned to the other, ignoring the names of types.
Click to reveal answer
intermediate
Why does TypeScript allow extra properties when assigning variables but not with object literals?
TypeScript performs excess property checks only on object literals to catch typos or mistakes. When assigning variables, it trusts the variable's type and uses structural compatibility, allowing extra properties.
Click to reveal answer
intermediate
How can you bypass excess property checks when passing object literals?
You can assign the object literal to a variable first, or use a type assertion (like 'as') to tell TypeScript to trust the object shape, bypassing excess property checks.
Click to reveal answer
intermediate
Give an example where excess property checks cause an error but structural compatibility allows assignment.
Example: Passing {a: 1, b: 2, c: 3} directly to a function expecting {a: number, b: number} causes an error due to excess property 'c'. But assigning it to a variable first and then passing it works because of structural compatibility.
Click to reveal answer
What triggers excess property checks in TypeScript?
AAssigning a variable to another variable
BUsing type assertions
CAssigning an object literal directly to a typed variable or parameter
DDeclaring interfaces
What does structural compatibility in TypeScript compare?
AThe shape (properties and types) of types
BThe runtime values
CThe order of properties
DThe names of types
Which of these will cause an excess property check error?
AUsing a type assertion
BAssigning {x: 1, y: 2, z: 3} to a variable typed {x: number, y: number}
CAssigning a variable with extra properties to a typed variable
DPassing {x: 1, y: 2, z: 3} directly to a function expecting {x: number, y: number}
How can you avoid excess property check errors when passing extra properties?
ARemove all extra properties
BAssign the object literal to a variable first
CUse a different language
DIgnore TypeScript errors
Does TypeScript check excess properties when assigning variables to variables?
ANo, it uses structural compatibility
BOnly if variables have different names
CYes, always
DOnly in strict mode
Explain the difference between excess property checks and structural compatibility in TypeScript.
Think about when TypeScript warns about extra properties and when it allows them.
You got /4 concepts.
    How can you handle a situation where an object literal has extra properties but you want to assign it to a type without errors?
    Consider ways to bypass excess property checks safely.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does TypeScript's excess property checks primarily prevent when assigning an object literal to a variable of a specific type?
      easy
      A. Assigning object literals with extra properties not defined in the target type
      B. Assigning objects with missing properties
      C. Assigning objects with incompatible property types
      D. Assigning objects with properties in a different order

      Solution

      1. Step 1: Understand excess property checks context

        Excess property checks happen when assigning an object literal directly to a typed variable.
      2. Step 2: Identify what excess property checks prevent

        They prevent extra properties not declared in the target type from being assigned, catching typos or mistakes.
      3. Final Answer:

        Assigning object literals with extra properties not defined in the target type -> Option A
      4. Quick Check:

        Excess property checks = prevent extra properties [OK]
      Hint: Excess checks block extra properties in direct object literals [OK]
      Common Mistakes:
      • Confusing excess property checks with missing property errors
      • Thinking property order matters
      • Assuming excess checks apply to variables, not literals
      2. Which of the following TypeScript assignments will cause an excess property check error?
      easy
      A. const obj: {name: string} = {name: 'Dave'} as {name: string};
      B. const extra = {name: 'Bob', age: 25}; const obj: {name: string} = extra;
      C. const obj: {name: string} = {name: 'Carol'};
      D. const obj: {name: string} = {name: 'Alice', age: 30};

      Solution

      1. Step 1: Check direct object literal assignments

        const obj: {name: string} = {name: 'Alice', age: 30}; assigns a literal with an extra property age directly to a typed variable, triggering excess property checks.
      2. Step 2: Compare with other options

        const extra = {name: 'Bob', age: 25}; const obj: {name: string} = extra; assigns from a variable, so excess property checks do not apply. Options C and D have no extra properties.
      3. Final Answer:

        const obj: {name: string} = {name: 'Alice', age: 30}; -> Option D
      4. Quick Check:

        Direct literal with extra property = error [OK]
      Hint: Extra properties in direct literals cause errors, variables do not [OK]
      Common Mistakes:
      • Thinking variables cause excess property errors
      • Ignoring the difference between literals and variables
      • Assuming type assertions always cause errors
      3. What will be the output of this TypeScript code?
      interface Person { name: string; }
      const extra = { name: 'Eve', age: 40 };
      const p: Person = extra;
      console.log(p.name);
      medium
      A. Runtime error
      B. Error: Excess property 'age' not allowed
      C. Eve
      D. undefined

      Solution

      1. Step 1: Understand assignment from variable

        Assigning from variable extra bypasses excess property checks, so assignment is allowed.
      2. Step 2: Check console output

        Accessing p.name prints 'Eve' as expected.
      3. Final Answer:

        Eve -> Option C
      4. Quick Check:

        Variable assignment allows extra properties, prints name [OK]
      Hint: Variables with extra props assign fine; literals with extras error [OK]
      Common Mistakes:
      • Expecting excess property error on variable assignment
      • Confusing compile-time error with runtime output
      • Assuming extra properties are removed
      4. Identify the error in this TypeScript code and fix it:
      interface Car { make: string; }
      const car = { make: 'Toyota', year: 2020 };
      const myCar: Car = { make: 'Honda', year: 2018 };
      medium
      A. Error due to extra property 'year' in direct object literal; fix by assigning from variable
      B. Error due to missing property 'year'; fix by adding 'year' to interface
      C. No error; code is correct
      D. Error due to wrong property type; fix by changing 'year' to string

      Solution

      1. Step 1: Identify excess property check error

        Direct assignment of object literal with extra property year causes error.
      2. Step 2: Fix by assigning from variable

        Assigning from variable car avoids excess property checks and fixes error.
      3. Final Answer:

        Error due to extra property 'year' in direct object literal; fix by assigning from variable -> Option A
      4. Quick Check:

        Direct literal with extra prop = error; use variable [OK]
      Hint: Assign extra props via variable, not direct literal [OK]
      Common Mistakes:
      • Adding extra properties to interface unnecessarily
      • Ignoring excess property check rules
      • Assuming no error on direct literal with extra props
      5. Given this interface and code, which assignment will NOT cause a TypeScript error?
      interface User { username: string; }
      
      // Option 1
      const u1: User = { username: 'john', email: 'john@example.com' };
      
      // Option 2
      const extraUser = { username: 'jane', email: 'jane@example.com' };
      const u2: User = extraUser;
      
      // Option 3
      const u3 = { username: 'doe', email: 'doe@example.com' } as User;
      
      // Option 4
      const u4: User = { username: 'max' };
      hard
      A. Only Option 3 and Option 4
      B. Only Option 2 and Option 4
      C. Only Option 1 and Option 3
      D. All options cause errors

      Solution

      1. Step 1: Analyze Option 1

        Direct literal with extra property email causes excess property check error.
      2. Step 2: Analyze Option 2 and 4

        Option 2 assigns from variable, so no error. Option 4 matches interface exactly, no error.
      3. Step 3: Analyze Option 3

        Type assertion on direct object literal with extra property email still triggers excess property checks, causing an error.
      4. Final Answer:

        Only Option 2 and Option 4 -> Option B
      5. Quick Check:

        Direct literal with extras errors; variable assignment and exact match okay [OK]
      Hint: Direct literals with extras error; variables and exact matches okay [OK]
      Common Mistakes:
      • Thinking type assertions bypass excess property checks on object literals
      • Thinking all direct literals with extras are allowed
      • Ignoring structural compatibility rules
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard