TypeScript offers two powerful tools for defining the shape of data: type and interface. But what’s the difference between them, and when should you use one over the other?
In this post, we'll cover everything you need to know about type vs interface, with examples, comparisons, and best practices.
🔹 What is a type in TypeScript?
A type is a TypeScript feature used to define aliases for primitive types, unions, intersections, tuples, and object shapes.
✅ Example:
type UserID = string | number;
type Point = {
x: number;
y: number;
};
Types are flexible and work well for complex structures like mapped types, unions, and intersections.
🔸 What is an interface?
An interface is typically used to define the structure of an object. It supports declaration merging and is preferred for defining public APIs or class contracts.
✅ Example:
interface Person {
name: string;
age: number;
}
You can extend interfaces to create complex structures.
interface Employee extends Person {
role: string;
}
🆚 Key Differences: type vs interface
| Feature | type |
interface |
|---|---|---|
| Object Shape Definition | ✅ | ✅ |
| Union/Intersection Types | ✅ | ❌ |
| Declaration Merging | ❌ | ✅ |
| Extending Types | ✅ (via &) |
✅ (via extends) |
| Use with Classes | ❌ | ✅ |
| React Props | ✅ | ✅ (often preferred) |
🧠 When to Use type vs interface
Here are some common guidelines:
-
Use
interfacewhen:- You’re defining the shape of an object or class
- You want to benefit from declaration merging
- You're working with public APIs or React props
-
Use
typewhen:- You need unions or intersections
- You're defining primitive aliases or tuples
- You're working with more complex type logic
💻 Real-World Example
// Using type
type User = {
id: number;
name: string;
};
type Admin = User & {
role: 'admin';
};
// Using interface
interface IUser {
id: number;
name: string;
}
interface IAdmin extends IUser {
role: 'admin';
}
Both achieve similar results but may differ in behavior when extending or merging.
📽️ Watch the Full Video
Learn with visuals and live coding examples in this video:
🗨️ What Do You Prefer?
Do you use type, interface, or a mix of both in your projects? Let me know in the comments below or drop your questions!
Top comments (6)
Perfect timing for this cuz I always end up googling it again and again lol
Happy you found it helpful 😊
Been switching back and forth on this forever, honestly - you think it actually matters much once your codebase gets big?
Yes... I think so.
I usually use TYPE for simple declarations, but INTERFACE for more complex declarations
This may not have much impact but it keeps the codebase organised for me
Great examples to understand
Thank you 🙏