Concept Flow - Declaration merging for interfaces
Declare Interface A
Declare Interface A again
Merge properties of both
Use merged Interface A
When two interfaces share the same name, TypeScript merges their properties into one combined interface.
interface User {
name: string;
}
interface User {
age: number;
}
const user: User = { name: "Alice", age: 30 };| Step | Action | Interface 'User' Properties | Resulting Type |
|---|---|---|---|
| 1 | Declare interface User with 'name: string' | { name: string } | User has property 'name' |
| 2 | Declare interface User again with 'age: number' | { name: string, age: number } | User now has 'name' and 'age' |
| 3 | Create object 'user' of type User | { name: string, age: number } | Object must have both 'name' and 'age' |
| 4 | Assign { name: 'Alice', age: 30 } to 'user' | { name: string, age: number } | Valid assignment, no errors |
| Variable | After Step 1 | After Step 2 | After Step 3 | After Step 4 |
|---|---|---|---|---|
| User Interface Properties | { name: string } | { name: string, age: number } | { name: string, age: number } | { name: string, age: number } |
| user | undefined | undefined | uninitialized | { name: 'Alice', age: 30 } |
Declaration merging lets multiple interfaces with the same name combine their properties. Syntax: Declare interface multiple times with same name. Result: One interface with all properties merged. Objects must have all merged properties. Conflicting property types cause errors.