Type Vs Interface in Typescript

willon

Willian Novaes

Posted on November 13, 2024

Type Vs Interface in Typescript

Type vs. Interface in TypeScript: What's the Difference?

Hey everyone!

Lately, I've been digging deeper into TypeScript, and I thought I'd share some insights on a topic that often confuses many of us: the difference between type and interface. If you've ever wondered when to use one over the other, you're not alone!

πŸ” So, what's the deal?

Both type and interface allow us to define custom types in TypeScript, but they have their own unique features and use cases. Here's a breakdown:


πŸ“ Type Aliases (type)

What are they?

  • Think of type as a way to give a name to any type. This could be a primitive, a union, a tuple, an object, or even a function type.

Pros:

  • Versatility with Complex Types: Perfect for defining unions and intersections.
  type Status = "success" | "error" | "loading";
Enter fullscreen mode Exit fullscreen mode
  • Primitives and Tuples: You can alias primitive types, tuples, and more.
  type Point = [number, number];
Enter fullscreen mode Exit fullscreen mode
  • Advanced Type Features: Great for mapped types and conditional types.

Cons:

  • No Declaration Merging: Unlike interfaces, you can't reopen a type alias and add new properties later.
  • Less OOP-Friendly: Types can't be implemented by classes or extended in the same way interfaces can.

πŸ“ Interfaces (interface)

What are they?

  • Interfaces are primarily used to describe the shape of objects, including their properties and methods.

Pros:

  • Extensibility: You can extend interfaces or even merge them. This is super handy for large codebases.
  interface User {
    name: string;
  }

  interface User {
    age: number;
  }
  // User now has both name and age properties
Enter fullscreen mode Exit fullscreen mode
  • Class Implementation: Ideal for object-oriented patterns. Classes can implement interfaces.
  interface Drivable {
    drive(): void;
  }

  class Car implements Drivable {
    drive() {
      // implementation
    }
  }
Enter fullscreen mode Exit fullscreen mode

Cons:

  • No Union Types: Interfaces can't define union types directly.
  • Limited with Primitives and Tuples: Not suitable for aliasing these types.

πŸ€” So, which one should you use?

Use type when:

  • Defining complex types like unions and intersections.
  • Working with primitives, tuples, or function types.
  • You need advanced type manipulation.

Use interface when:

  • Defining the shape of an object or class.
  • You might need to extend or merge types later on.
  • Following object-oriented design patterns.

πŸ’‘ My Two Cents

Personally, I lean towards using interface for defining objects and classes because I appreciate the extensibility. For everything else, especially when dealing with unions or more complex types, type is my go-to.

But that's just me! What's your experience? Do you have a preference between type and interface in TypeScript? I'd love to hear your thoughts and any tips you might have.

Feel free to share in the comments below! πŸ‘‡

πŸ’– πŸ’ͺ πŸ™… 🚩
willon
Willian Novaes

Posted on November 13, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related