如果你已經使用 TypeScript 一段時間了,那麼你可能接觸過類型介面。乍一看,它們非常相似。兩者都允許你定義物件的形狀,並為程式碼提供結構。但是,什麼時候該使用其中一種呢?讓我們以一種簡單實用的方式來分析。

什麼是類型?

TypeScript 中的類型就像是附加到值上的標籤。它告訴編譯器需要什麼樣的資料。使用type ,你可以描述:

  • 物件

  • 字串、數字、布林值等基元

  • 工會

  • 交叉路口

  • 功能

以下是一個例子:

type User = {
  id: number
  name: string
}

type Status = "active" | "inactive" | "suspended"

在上面的程式碼中, User描述了一個物件結構,而Status是字串文字的聯合。

類型非常靈活,因為它們允許組合。您可以使用並集、交集和映射類型來表達複雜的結構。

什麼是介面?

介面也定義了物件的形狀。它最常用於描述物件和類別。

例子:

interface User {
  id: number
  name: string
}

這看起來與之前的type幾乎完全相同。接口的亮點在於擴充和合併。

主要區別

擴大

  • 接口可以擴充其他介面。

  • 類型可以使用交叉點來擴充其他類型。

interface Person {
  id: number
}

interface Employee extends Person {
  role: string
}

type Animal = { species: string }
type Dog = Animal & { breed: string }

兩者實現相同的結果,但語法不同。

聲明合併

接口支援聲明合併。如果你兩次聲明同一個接口,TypeScript 會將它們合併起來。

interface Car {
  brand: string
}

interface Car {
  model: string
}

const myCar: Car = {
  brand: "Toyota",
  model: "Corolla"
}

對於type來說,這是不可能的。

用例

  • 當您需要聯合、交集或更進階的類型表達式時,請使用類型

  • 當您使用物件、類別或想要利用聲明合併時,請使用介面

您應該使用哪一個?

實務中,類型和介面都是有效的選擇。 TypeScript 團隊自己也說過,你不必過度糾結於使用哪一種。如果你要建模複雜的資料組合,類型可能感覺更自然。如果你要設計物件或類別的形狀,介面可能更有意義。

一個好的經驗法則是:

  • 描述物件時從介面開始。

  • 當您需要更多靈活性時,請選擇類型。

最後的想法

TypeScript 中的類型和介面並非互相競爭。它們在許多領域都有重疊,但也各有優勢。你使用得越多,就越能根據具體情況選擇使用哪一種。

所以下次寫 TypeScript 時,不要想太多。選擇適合你正在解決的問題的那個,記住兩者都是該語言中的「一等公民」。

厭倦了重複的任務、令人困惑的命令或無休止的除錯?這個平台旨在讓一切變得簡單。它是免費的、開源的,並且專為開發者打造。

👉 檢視工具: FreeDevTools

👉 支援倉庫: freedevtools


原文出處:https://dev.to/rijultp/types-vs-interfaces-in-typescript-a-clear-guide-for-developers-13kf


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝10   💬6   ❤️11
454
🥈
我愛JS
📝1   💬5   ❤️4
88
🥉
AppleLily
📝1   💬4   ❤️1
47
#4
💬2  
6
#5
💬1  
5
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次