TypeScript 中的介面與類
TypeScript 是一種強型別語言,支援複雜和原始型別。它是 JavaScript 程式語言的超集,因此,它還具有 JavaScript 中存在的不同特性,例如物件導向程式設計 (OOP) 概念和函數語言程式設計概念。
TypeScript 對於擁有大型程式碼庫的組織變得非常有用。TypeScript 有助於防止在 JavaScript 錯誤推斷型別的情況下不可避免的執行時錯誤。
支援 TypeScript 的適當工具和 IDE 可以通過使用者定義的各種介面或 TypeScript 編譯器推斷的型別來建議程式碼完成、檢測型別中的錯誤、自動修復錯誤等等。
本教程將重點介紹類和介面之間的差異,並將演示何時使用哪個來對某些資料進行建模。
TypeScript 中類和介面的區別
基本上需要類來儲存具有與其關聯的不同屬性和方法的不同物件的實現。類可能具有已初始化的屬性並在其中具有各種方法的實現,可用於初始化或建立不同的物件。
介面僅用於儲存物件對應的各種屬性的型別資訊。它通常用於型別檢查,從而防止執行時錯誤,不能用於物件例項化。
class Animal {
name : string;
eyes : number;
constructor( name : string, eyes : number) {
this.name = name;
this.eyes = eyes;
}
getName() : string {
return this.name;
}
getEyes() : number {
return this.eyes;
}
}
上面的程式碼塊顯示了 TypeScript 類的實現,該類包含與 Animal
類關聯的不同屬性的藍圖,並具有一些方法。可以使用介面對相同的資料進行建模。
interface Animal {
name : string;
eyes : number;
getName : () => string;
getEyes : () => number;
}
因此,根據介面,它具有對實現該介面的任何物件進行型別檢查的所有可能性,但與類不同的是,它無法初始化類的屬性,也不能對類中的函式進行任何實現。
何時在 TypeScript 中使用類與介面
類用作包含預設值、不同方法實現的物件藍圖,或者在使用 new
關鍵字建立同一類的不同例項時。此外,對於類,程式碼將在執行時佔用空間,這與 TypeScript 編譯器刪除的介面不同。
與介面不同,類具有用於在類中新增一些初始化程式碼和初始化資料變數的建構函式。
因此,類用於表示一些複雜的資料模型,其物件可能需要建立,並且通常需要擴充套件,並且可能需要附加初始化邏輯。
同時,介面用於進行簡單的資料建模,僅由與物件關聯的屬性的型別組成。
它們還可以充當某些類的資料介面,例如 class Tiger implements Animal
- Tiger
類將具有與介面 Animal
中存在的相同屬性的所有型別檢查支援。