When working with TypeScript, you often define the structure of data using types and interfaces. While they seem similar, understanding their differences and knowing when to use each is key for clean, scalable code.
What are Types and Interfaces ?
Interface: Mainly used to describe the shape of objects. They support declaration merging, meaning you can extend them by declaring the same interface multiple times.
Type: A more flexible tool that can represent object shapes, primitives, unions, intersections, and tuples. Types can't be re-opened or merged once declared.
Difference between Interface and Type
| Feature | TypeScript Interface | TypeScript Type |
|---|---|---|
| Purpose | Defines shape of objects/classes | Defines objects, primitives, unions, intersections |
| Extensibility | Supports declaration merging & extends keyword | Can create intersections (&) but no declaration merging |
| Primitive Types | Can’t describe primitives | Can alias primitives like string, number, boolean |
| Union / Intersection | Supports extending but no union/intersection types | Supports union ( | ) and intersection ( & ) types |
| Use Case | Best for public APIs & extensible object shapes | Best for flexible type aliases, complex compositions |
Real-Time Scenario: Defining User Profiles
Imagine you’re building a social app with user profiles.
Using Interface:
Using Type:
When to Choose Which?
Choose Interface: When designing public APIs or object models that might need extension or merging.
Choose Type: For more complex type compositions like unions, tuples, or primitives where flexibility is needed.
Conclusion
Both types and interfaces are powerful. Use interfaces for clear object shapes and extendability, and types for flexibility with complex data. Mastering both helps write robust TypeScript code tailored to your project needs.
