Incomplete documentation of "Freshness" and "Structural typing" on https://basarat.gitbook.io/typescript/type-system/freshness

Author: AnupamKhoslaCreated Jun 23, 2025Updated Jun 23, 2025

It is never defined or explained, what actually "Freshness" and "Structural Typing" are.

TypeScript provides a concept of Freshness (also called strict object literal checking) to make it easier to type check object literals that would otherwise be structurally type compatible.

Structural typing is extremely convenient. Consider the following piece of code. This allows you to very conveniently upgrade your JavaScript to TypeScript while still preserving a level of type safety:

But, what is the concept of Freshness? What does it mean to be structurally compatible and what is structural typing?

The correct explanation is

function logName(x: { name: string }) {
    console.log(x.name);
}

const person = { name: "Alice", age: 30 };
logName(person); // ✅ OK — structurally compatible. 
logName({ name: "Bob", age: 30 }); // ❌ Error -- Freshness; passed a fresh object

Freshness means no extra properties are allowed if an object literal is passed straight away.

Structurally compatible means if the object is first stored in a var, it can be passed with extra properties.