TypeScript Learning

介面 (Interfaces)

⏱️預計 23 分鐘
📖TypeScript 課程
🎯實戰導向

第 6 課:介面 (Interfaces)

學習目標

  • 理解介面在 TypeScript 中的核心作用:定義契約
  • 掌握如何使用介面定義物件的形狀,包括唯讀和可選屬性
  • 學會定義函式類型介面、可索引類型介面和類別類型介面
  • 理解並應用介面繼承
  • 初步認識混合類型介面
  • 能夠運用介面提升程式碼的可讀性和可維護性

1. 介面的基本概念

介面 (Interface) 是 TypeScript 的核心原則之一,用於「描述」物件的形狀或契約 (contract)。它們定義了物件應該包含哪些屬性以及這些屬性的類型。

為什麼需要介面?

定義契約:介面好像一份合約,規定了物件應該有什麼。用了介面,你就可以確保傳入函式的物件或者類別的實例符合特定的結構。

提高可讀性:透過介面,其他人(或者未來的你)可以很快地理解一個物件應該有什麼屬性和方法。

促進團隊協作:在團隊開發中,介面可以作為前後端或者不同模組之間的溝通橋樑,確保大家對數據結構有一致的理解。

更好的工具支援:IDE(例如 Visual Studio Code)可以根據介面提供更好的自動完成和錯誤提示。

🎯 互動練習 1:建立你的第一個介面

2. 可選屬性 (?)

有時我們希望介面中的某些屬性是可有可無的。這個時候就可以用 ? 符號將屬性標記為可選的。

typescript
1interface Product {
2  id: number;
3  name: string;
4  price: number;
5  description?: string; // 可選屬性
6  category?: string;    // 可選屬性
7}

🎯 互動練習 2:使用可選屬性

3. 唯讀屬性 (readonly)

介面中的屬性可以用 readonly 修飾符標記,表示這些屬性在物件創建後就不可以再被修改。

typescript
1interface Point {
2  readonly x: number;
3  readonly y: number;
4}
5
6let point: Point = { x: 10, y: 20 };
7// point.x = 5; // 錯誤:Cannot assign to 'x' because it is a read-only property

🎯 互動練習 3:唯讀屬性實作

4. 函式類型介面

介面不單止可以描述帶有屬性的物件,也可以描述函式類型。函式類型介面定義了函式的參數列表和回傳類型。

typescript
1interface SearchFunc {
2  (source: string, subString: string): boolean;
3}
4
5let mySearch: SearchFunc = function(src, sub) {
6  return src.search(sub) > -1;
7};

🎯 互動練習 4:函式類型介面

5. 介面繼承

介面可以相互繼承,這讓我們能夠將介面分割成可重用的組件。

typescript
1interface Shape {
2  color: string;
3}
4
5interface Square extends Shape {
6  sideLength: number;
7}
8
9let square: Square = {
10  color: "blue",
11  sideLength: 10
12};

🎯 互動練習 5:介面繼承實作

6. 可索引類型介面

TypeScript 支援兩種索引簽名:字串和數字。

typescript
1interface StringArray {
2  [index: number]: string;
3}
4
5interface StringDictionary {
6  [key: string]: string;
7}

🎯 互動練習 6:可索引類型

7. 綜合練習

🎯 互動練習 7:圖書管理系統

8. 知識檢查

🎯 互動練習 8:介面知識測驗

總結

今日學到的重點

  • 介面定義契約:使用 interface 關鍵字定義物件的結構
  • 可選屬性:使用 ? 讓屬性變成可選的
  • 唯讀屬性:使用 readonly 讓屬性不可修改
  • 函式類型介面:定義函式的參數和返回值類型
  • 介面繼承:使用 extends 讓介面繼承其他介面
  • 可索引類型:使用索引簽名定義動態屬性

課後建議

  1. 練習定義不同類型的介面
  2. 嘗試使用介面繼承來組織程式碼
  3. 在實際專案中使用介面來提高程式碼質量
  4. 重複做上面的互動練習,直到完全理解

下一課預告

下一課我們會學習:

  • 類別的基本語法和建構函式
  • 類別繼承和方法覆寫
  • 存取修飾符(public、private、protected)
  • 靜態屬性和方法

恭喜你完成第六課! 🎉

你已經掌握了 TypeScript 介面的核心概念。介面是 TypeScript 中非常重要的特性,它能幫助你寫出更安全、更清晰的程式碼!