Lädt...


🔧 Type ✔ Vs Interface ❌: Why you should chose type over interface in typescript.


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

I have come to a solution that you should always use types over interfaces. Let's breakdown why!!

  • Interfaces can only specify objects, but type alias can specify objects and everything else. Let's say we have a single Address field and with type you'll define its type like this:
type Address = string;
const address: Address = '123 Hallway'

But you can't do such stuff with interface like:

interface Address = string; //error
const address: Address = '123 Hallway'

Because interface alias can only define objects. We'll need to change structure altogether if we want to use interface like:

interface Address {
    address: string;
}
const address: Address = {
    address: '12 3 Hallway'
}

That's first problem with interfaces.

  • type alias can define Union types and interface alias can't: Let's user can have multiple or a single address:
type Address = string | string[] ;
const address: Address = '123 Hallway'
const newAddress: Address= ['123 Hallway', 'Flag Plaza']

string | string[] is called a Union type, address can a string, or an array of string.

You can do such stuff with interface alias.

  • types alias can easily use utility types. Interface can do but it will look ugly, for example consider a User Object:
type User = {
    name: string;
    age: number;
    created_at: Date;
}

Now, let's say we have a guest Object, that is not logged in but we can check when it was created (first landed on the page). In this scenario, guest is like a user but not an actual user. We want to have created_at property in Guest from User In type alias we do it like:

     type Guest = Omit<User, 'name' | 'age'>

Technically it is possible with interface but see how it works:

type Guest extends Omit<User, 'name' | 'age'> {}

It works but it is an ugly syntax, isn't it?

  • Sometimes you will need to describe tuples. Here is how we describe it with type alias
type Address = [string, number, string] ;
const address: Address = ['Hallway', 2, 'Abdul Plaza']

But with interface, see how we do it:

type Address extends Array<number | string> {
    0: string
    1: number;
    2: string;
}

const address: Address = ['Hallway', 2, 'Abdul Plaza']

Ugly syntax again.

  • With types alias we can extract types very easily.
const love_bonito ={
    level: 1,
    store_id: 'scad_12hdedhefgfeaa',
    country: ['US','PK','IND'],
    user: {
        user_id: "blah',
        username: 'nishat',
        likes: 421,
    },
};

// let's extract type for love_bonito
type LoveBonito = typeOf love_bonito;

// or even something inside love_bonito
type User = typeOf love_bonito.user;  

Bonus for this is that if we already now level is always one and nothing else, we can do that as well:

const love_bonito ={
    level: 1,
    store_id: 'scad_12hdedhefgfeaa',
    country: ['US','PK','IND'],
    user: {
        user_id: "blah';
        username: 'nishat';
        likes: 421;
    },
} as const

// let's extract type for love_bonito
type LoveBonito = typeOf love_bonito

// or even something inside love_bonito
type User = typeOf love_bonito.user

Now level will be inferred as 1, not as any number.

  • With interface alias you can redeclare an interface,
interface Home {
    rooms: number;
    light_bulbs: 12;
    rented_to: "Abu Turab";
}

interface Home {
   fans: 16;
}

// final type 

interface Home {
    rooms: 3;
    light_bulbs: 12;
    rented_to: "Abu Turab";
    fans: 16;
}

We can't redeclare type alias. You might thing, "Oh! Sheraz, here, this is a plus point of interface", but actually its not!!!

It sounds confusing, to have multiple declarations with the same identifier throughout your codebase. It seems really confusing to me.

Suppose you are working with a team, you knew about type of an object (types declared with interface), but somebody in your team redeclares and changes it, what would you do.

But with type alias this problem is sorted out as well. If you redeclare a type it throws an error

duplicate identifier

  • The name of library is TYPESCRIPT not INTERFACESCRIPT. That might be funky but yeah, why would a company chose to name their library TYPESCRIPT and not IBTERFACESCRIPT. If company is preferring type over interface, so why don't you? 😆

Conclusion

Always prefer types over interfaces. Some devs say that interfaces load faster than types... But that happened in past. Now a days there's no difference regarding performance. There are some use cases where you might need interfaces, but it does not mean that you should interfaces all the time.

...

🔧 Type ✔ Vs Interface ❌: Why you should chose type over interface in typescript.


📈 78.16 Punkte
🔧 Programmierung

🔧 TypeScript: Why It's Taking Over JavaScript (And Why You Should Care)


📈 37.09 Punkte
🔧 Programmierung

🐧 Owner Explains Why He Chose Tata Nexon XM Over XUV300, Brezza, And Venue


📈 31.72 Punkte
🐧 Linux Tipps

🔧 Why I Chose React Over Angular


📈 31.72 Punkte
🔧 Programmierung

🔧 Why I chose Svelte over React?


📈 31.72 Punkte
🔧 Programmierung

🔧 Why we chose C over Rust


📈 31.72 Punkte
🔧 Programmierung

📰 Why I chose YouTube TV over the other live TV streaming services


📈 31.72 Punkte
📰 IT Nachrichten

🔧 Why You Should Choose TypeScript Over JavaScript


📈 31.7 Punkte
🔧 Programmierung

🐧 [Discussion] If you could chose one closed source software to be open source, what software do you choose?


📈 28.45 Punkte
🐧 Linux Tipps

🔧 I made "TypeScript Swagger Editor", new type of Swagger UI writing TypeScript code in the browser


📈 27.71 Punkte
🔧 Programmierung

🔧 We Chose Meilisearch Over 10+ Other Search Engines Despite a Major Drawback


📈 26.33 Punkte
🔧 Programmierung

🎥 Microsoft Chose Profit Over Goverment #microsoft #government #infosecnews #podcastclips


📈 26.33 Punkte
🎥 IT Security Video

🔧 South Korea's No.1 Search Engine Chose JuiceFS over Alluxio for AI Storage


📈 26.33 Punkte
🔧 Programmierung

🐧 I put Linux on my friends' laptop as a placeholder, and he chose to keep it over windows (story time)


📈 26.33 Punkte
🐧 Linux Tipps

🐧 I chose Linux over Windows


📈 26.33 Punkte
🐧 Linux Tipps

📰 NIST AI Risk Management Framework: What You Should Know and Why You Should Care


📈 26.29 Punkte
📰 IT Security Nachrichten

🔧 Why I Chose Vite.js for My React Projects


📈 26.18 Punkte
🔧 Programmierung

🎥 Why deepwatch Chose Splunk to Secure Customer Networks - Patrick Orzechowski - BSW #202


📈 26.18 Punkte
🎥 IT Security Video

🔧 Why I Chose React to Start My Full-Stack Journey


📈 26.18 Punkte
🔧 Programmierung

📰 Agent vs Agentless Monitoring: Why We Chose Agentless


📈 26.18 Punkte
📰 IT Security Nachrichten

🔧 Why we chose Bun


📈 26.18 Punkte
🔧 Programmierung

🎥 Why Doodle chose Jira Product Discovery ahead of other roadmapping tools | Atlassian


📈 26.18 Punkte
🎥 Video | Youtube

🔧 Why I Chose Not To Continue Interviewing With A Certain Popular Tech Podcast


📈 26.18 Punkte
🔧 Programmierung

🎥 Why Kedasha chose a .dev domain name


📈 26.18 Punkte
🎥 Videos

🎥 Why Moure chose a .dev domain name


📈 26.18 Punkte
🎥 Videos

🎥 Why Creator chose a .app domain name


📈 26.18 Punkte
🎥 Videos

🎥 Why DanaScript chose a .dev domain name


📈 26.18 Punkte
🎥 Videos

📰 I bought a Mac Studio: Here are the specs I chose and why


📈 26.18 Punkte
📰 IT Nachrichten

📰 Did your TV streaming bill just go up again? Here's why I chose YouTube TV


📈 26.18 Punkte
📰 IT Nachrichten

🔧 Why I Chose Node.js for My Side Project (Even Though .NET C# Is Still My Day Job)


📈 26.18 Punkte
🔧 Programmierung

🔧 Why OpenAI chose Remix?


📈 26.18 Punkte
🔧 Programmierung

📰 Why I finally ditched the cable company and chose YouTube TV


📈 26.18 Punkte
📰 IT Nachrichten

🔧 From Real Estate to Ruby - Why I Chose Ruby on Rails


📈 26.18 Punkte
🔧 Programmierung

matomo