如果你已經使用 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