Both describe the shape of data. The differences are small but real.
Direct answer
Use interface to describe object shapes that may be extended, and type for unions, tuples and other complex types. For simple objects, either works. Pick one convention in your project and stick to it.
Side by side
interface User {
id: number;
name: string;
}
type UserType = {
id: number;
name: string;
};
type Status = "active" | "inactive"; // only a type can do this
Extending
interface Admin extends User {
permissions: string[];
}
type AdminType = UserType & { permissions: string[] };
Key differences
interface | type | |
|---|---|---|
| Extend | extends | & intersection |
| Union types | no | yes |
| Declaration merging | yes | no |
| Primitives and tuples | no | yes |
Where Teyro fits
Teyro's TypeScript for Beginners course turns this into short lessons you can play in a few minutes a day. It has 20 lessons, and you can start free.
The bottom line
Choose one for objects, use type for unions, and be consistent.



