Excess property checking helps catch mistakes when you add extra properties that are not expected. It keeps your code safe and clear.
Excess property checking behavior in Typescript
interface TypeName {
property1: Type1;
property2: Type2;
}
const obj: TypeName = {
property1: value1,
property2: value2
// extraProperty: value3, // This will cause an error
};Excess property checking happens when you assign an object literal directly to a variable or pass it as an argument.
It only checks for extra properties in object literals, not in variables or expressions.
interface Person {
name: string;
age: number;
}
const person: Person = {
name: "Alice",
age: 30,
location: "Wonderland" // Error: 'location' does not exist in type 'Person'
};interface Car {
make: string;
model: string;
}
const carDetails = {
make: "Toyota",
model: "Corolla",
year: 2020
};
const car: Car = carDetails; // No error here because carDetails is a variable, not an object literalinterface Book {
title: string;
author: string;
}
function printBook(book: Book) {
console.log(`${book.title} by ${book.author}`);
}
printBook({
title: "1984",
author: "George Orwell",
pages: 328 // Error: 'pages' does not exist in type 'Book'
});This program shows how excess property checking works. The commented-out code shows an error when an extra property is added directly in an object literal. But when the extra property is in a variable, TypeScript allows it.
interface User {
username: string;
email: string;
}
// Correct object literal
const user1: User = {
username: "john_doe",
email: "john@example.com"
};
// Object literal with extra property - causes error
// const user2: User = {
// username: "jane_doe",
// email: "jane@example.com",
// age: 25 // Error: 'age' does not exist in type 'User'
// };
// Using a variable with extra property - no error
const extraInfo = {
username: "mike",
email: "mike@example.com",
age: 40
};
const user3: User = extraInfo;
console.log(user1);
console.log(user3);Excess property checking helps catch simple mistakes like typos in property names.
You can use type assertions or index signatures to bypass excess property checks if needed, but use them carefully.
Remember, excess property checking only applies to object literals assigned directly or passed as arguments.
Excess property checking warns you about extra properties in object literals.
It helps prevent bugs by catching unexpected properties early.
It only applies to object literals, not variables or expressions.