<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja" -->

---
title: Types vs. interfaces in TypeScript | daily.dev
description: Types and interfaces in TypeScript are tools used to define the shape of data, and each has specific use cases and capabilities. While interfaces define...
canonical: https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Types vs. interfaces in TypeScript | daily.dev
og:description: Types and interfaces in TypeScript are tools used to define the shape of data, and each has specific use cases and capabilities. While interfaces define...
og:url: https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja
og:image: https://api.daily.dev/og/posts/7pOYZOCjA.png
og:image:alt: Types vs. interfaces in TypeScript
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Types vs. interfaces in TypeScript

**[LogRocket](https://daily.dev/sources/logrocket)** · 13 min read · 716 upvotes · 16 comments

## Summary

Types and interfaces in TypeScript are tools used to define the shape of data, and each has specific use cases and capabilities. While interfaces define contracts for objects, types offer more flexibility, allowing for union types, conditional types, and more. Interfaces support declaration merging and extending other interfaces, but types are preferred for complex type manipulations due to advanced features. In many scenarios, the choice between the two can depend on personal preference.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.logrocket.com/types-vs-interfaces-typescript/>

## Community discussion

Top comments from developers on daily.dev.

**@dorogonov** · 7 upvotes

> For lazy guys you can directly jump to "When to use types vs. interfaces" section. And a short summary for myself that in most cases using of type is sufficient. Thanks a lot for the article.

**@shahadathossan79** · 1 upvotes

> Nice

**@emonahmed26** · 1 upvotes

> Amazing blog I learn new things about interface and type. Thanks a lot.

**@callumnaylor7** · 1 upvotes

> After watching: https://www.youtube.com/watch?v=zM9UPcIyyhQ&ab_channel=MattPocock
>
> My approach now it to always use types by default and only use interfaces if there is a need to 😊

**@jonasstasseyns** · 0 upvotes

> So why wouldn't we just always use types?

## Similar posts on daily.dev

- [Don’t just attend KubeCon \+ CloudNativeCon, Merge Forward your experience\!](https://daily.dev/posts/don-t-just-attend-kubecon-cloudnativecon-merge-forward-your-experience--l0rpp73x8) · CNCF · 1 upvotes · 0 comments
- [Announcing H2 2026 KCDs](https://daily.dev/posts/announcing-h2-2026-kcds-m96goajm1) · CNCF · 1 upvotes · 0 comments
- [Two months of Open Community Groups](https://daily.dev/posts/two-months-of-open-community-groups-asf52zhbs) · CNCF · 0 upvotes · 0 comments
- [CNCF Unveils Schedule for KubeCon \+ CloudNativeCon Europe 2026](https://daily.dev/posts/cncf-unveils-schedule-for-kubecon-cloudnativecon-europe-2026-ikhcoa5cb) · CNCF · 2 upvotes · 0 comments
- [CNCF Debuts KubeCon \+ CloudNativeCon Japan 2026 Schedule](https://daily.dev/posts/cncf-debuts-kubecon-cloudnativecon-japan-2026-schedule-xp5pyudub) · CNCF · 1 upvotes · 0 comments

---

Tags: [#javascript](https://daily.dev/tags/javascript), [#typescript](https://daily.dev/tags/typescript), [#frontend](https://daily.dev/tags/frontend)

[View this post on daily.dev](https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Types vs. interfaces in TypeScript","url":"https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja"},"datePublished":"2024-09-05T19:04:15.173Z","dateModified":"2024-11-08T11:58:27.349Z","description":"Types and interfaces in TypeScript are tools used to define the shape of data, and each has specific use cases and capabilities. While interfaces define...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/94126b04e28fc681fd598781b222228f?_a=AQAEuiZ","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/94126b04e28fc681fd598781b222228f?_a=AQAEuiZ","isAccessibleForFree":true,"articleSection":"LogRocket","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"LogRocket","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/logrocket","url":"https://daily.dev/sources/logrocket"},"commentCount":16,"discussionUrl":"https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":716},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":16}],"keywords":"javascript,typescript,frontend","timeRequired":"PT13M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"LogRocket","item":"https://daily.dev/sources/logrocket"},{"@type":"ListItem","position":3,"name":"Types vs. interfaces in TypeScript"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/types-vs-interfaces-in-typescript-7poyzocja","comment":[{"@type":"Comment","text":"For lazy guys you can directly jump to “When to use types vs. interfaces” section. And a short summary for myself that in most cases using of type is sufficient. Thanks a lot for the article.","datePublished":"2024-09-26T11:03:41.598Z","url":"https://daily.dev/posts/7pOYZOCjA#c-oKAv7hBHm","author":{"@type":"Person","name":"Dmytro Dorogonov","url":"https://daily.dev/dorogonov","image":"https://lh3.googleusercontent.com/a/ACg8ocI1QYxTyUcE8zLi6O5wZPmdrqcZ89mseSrx4wvmiltmntBBP7w=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":7}},{"@type":"Comment","text":"Nice","datePublished":"2024-09-12T08:00:10.330Z","url":"https://daily.dev/posts/7pOYZOCjA#c-ZYCehvBT8","author":{"@type":"Person","name":"Shahadat Hossan","url":"https://daily.dev/shahadathossan79","image":"https://lh3.googleusercontent.com/a/ACg8ocLrSUYLn5e_cpaYigiG3s_PTujt7-1D_lr8U1E1JFqQ94McEgA=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"Amazing blog I learn new things about interface and type. Thanks a lot.","datePublished":"2024-09-15T07:06:54.396Z","url":"https://daily.dev/posts/7pOYZOCjA#c-yKJuEcoP2","author":{"@type":"Person","name":"Emon Ahmed","url":"https://daily.dev/emonahmed26","image":"https://lh3.googleusercontent.com/a/ACg8ocKp26Ipu3Kkd-6U-3VwV7VXnWRpUlP2yqVQx_XtchQ2Pyw=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"After watching: https://www.youtube.com/watch?v=zM9UPcIyyhQ&amp;ab_channel=MattPocock\nMy approach now it to always use types by default and only use interfaces if there is a need to 😊","datePublished":"2024-10-10T13:19:54.039Z","url":"https://daily.dev/posts/7pOYZOCjA#c-xY3u5iRZ5","author":{"@type":"Person","name":"Callum","url":"https://daily.dev/callumnaylor7","image":"https://media.daily.dev/image/upload/s--O0TOmw4y--/f_auto/v1715772965/public/noProfile"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"So why wouldn’t we just always use types?","datePublished":"2024-10-03T09:39:16.505Z","url":"https://daily.dev/posts/7pOYZOCjA#c-IJQQOxmMo","author":{"@type":"Person","name":"Jonas Stasseyns","url":"https://daily.dev/jonasstasseyns","image":"https://lh3.googleusercontent.com/a/ACg8ocKSH2nws95dim7MGuzS7StyVb_bqfs7PqxfV4swJdSub7NYUA=s96-c"}}]}
```

