Challenge - 5 Problems
Excess Property Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of this TypeScript code with excess property?
Consider the following TypeScript code snippet. What will be the output when compiled and run with strict excess property checking enabled?
Typescript
interface Person {
name: string;
age: number;
}
const p: Person = { name: "Alice", age: 30, location: "NY" };
console.log(p);Attempts:
2 left
💡 Hint
Think about how TypeScript treats extra properties in object literals assigned to typed variables.
✗ Incorrect
TypeScript's excess property checking disallows object literals with properties not defined in the target type. Here, 'location' is not in 'Person', so the compiler throws an error.
❓ Predict Output
intermediate2:00remaining
What happens when assigning an object with excess properties via a variable?
Given this TypeScript code, what will be the output or error?
Typescript
interface Car {
make: string;
year: number;
}
const obj = { make: "Toyota", year: 2020, color: "red" };
const myCar: Car = obj;
console.log(myCar);Attempts:
2 left
💡 Hint
Excess property checking applies only to object literals assigned directly to typed variables.
✗ Incorrect
When assigning a variable to a typed variable, TypeScript does not perform excess property checking, so the extra 'color' property remains and is printed.
🔧 Debug
advanced2:00remaining
Why does this TypeScript code cause an error with excess properties?
Identify the cause of the error in this code and select the correct explanation.
Typescript
interface Book {
title: string;
author: string;
}
function printBook(book: Book) {
console.log(`${book.title} by ${book.author}`);
}
printBook({ title: "1984", author: "Orwell", pages: 328 });Attempts:
2 left
💡 Hint
Check how TypeScript treats object literals passed directly as function arguments.
✗ Incorrect
Excess property checking applies to object literals passed directly to functions expecting a typed parameter. The extra 'pages' property causes a compilation error.
📝 Syntax
advanced2:00remaining
Which option correctly bypasses excess property checking in TypeScript?
You want to assign an object with extra properties to a typed variable without error. Which option achieves this?
Typescript
interface User {
username: string;
email: string;
}
const user = { username: "john", email: "john@example.com", age: 25 };Attempts:
2 left
💡 Hint
Type assertion can bypass excess property checks.
✗ Incorrect
Using 'as User' tells TypeScript to trust the type, bypassing excess property checks. Direct object literals with extra properties cause errors.
🚀 Application
expert2:00remaining
How many properties does the resulting object have after this code runs?
Analyze the following TypeScript code and determine how many properties the final object 'result' has.
Typescript
interface Config {
host: string;
port: number;
}
const extra = { port: 8080, protocol: "https" };
const config: Config = { host: "localhost", ...extra };
const result = config;Attempts:
2 left
💡 Hint
Excess property checking applies to object literals, including properties from spread operators if they introduce unknown properties.
✗ Incorrect
Even with the spread operator, TypeScript performs excess property checking on the resulting object literal. Since 'extra' introduces 'protocol' not in 'Config', it causes a compilation error.