iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
JavaScript

用 TypeScript 重新定義前端開發:30 天的實踐與思考系列 第 10

Day10:TypeScript 的介面 (Interface) 基本概念

  • 分享至 

  • xImage
  •  

介面 (Interface)的定義

在 TypeScript 中,介面 (Interface) 是一種用來定義物件結構的合約。它為物件的屬性和方法提供了明確的描述,確保物件符合介面中定義的結構和行為。介面可以視為一種藍圖,用於定義物件的形狀,而不具體實作邏輯。這種結構化的設計讓 TypeScript 在靜態型別檢查時更有效率,避免不符合預期的型別錯誤。

介面的主要目的是規範程式碼的型別,使程式在編譯階段就可以發現型別不匹配的問題,從而減少程式執行時的錯誤。透過介面,開發者可以定義物件、函數、類別等的型別,並強制實作方遵守這些定義。

一、介面在 TypeScript 中的使用

在 TypeScript 中,介面可以用來定義物件的屬性和方法。語法非常簡單,使用 interface 關鍵字做型別註記即可。

1. 定義物件結構的介面

我們可以使用介面來定義一個物件應該包含哪些屬性及其型別:

interface Person {
    name: string;
    age: number;
    skill?: string; // 可選屬性
}

const Annie: Person = {
    name: 'John Doe',
    age: 18,
};

在這個例子裡,介面 Person 定義了物件的結構,其中包含了兩個必須的屬性 nameage,以及一個可選屬性 skill。透過這樣的設計,當我們定義一個變數 Annie 時,TypeScript 會檢查它是否符合 Person 介面的結構。如果少了必須的屬性,TypeScript 會在編譯時報錯,從而減少潛在的問題。

2. 函數中的介面

介面也可以用來定義函數的參數型別:

interface Product {
    name: string;
    price: number;
}

function printProductInfo(product: Product): void {
    console.log(`Product: ${product.name}, Price: ${product.price}`);
}

const item = { name: 'iPhone 16 pro', price: 36900 };
printProductInfo(item); // { name: 'iPhone 16 pro', price: 36900 }

這裡,我們定義了 Product 介面來描述物件結構,並將其作為 printProductInfo 函數的參數型別。這樣做不僅增加了程式碼的可讀性,也保證了傳入的參數符合預期的型別。

二、擴展介面 (Interface Inheritance)

介面可以透過 extends 關鍵字來進行擴展,這樣可以將現有的介面擴展為新的介面,從而實現更靈活的型別定義。

interface Animal {
    name: string;
    age: number;
}

interface Cat extends Animal {
    color: string;
}

const myCat: Cat = {
    name: 'Meow',
    age: 3,
    color: 'white'
};

在這個例子中,Cat 介面繼承了 Animal 介面,並額外定義了 color 屬性。因此,myCat 必須包含 nameagecolor 這三個屬性。

結論

介面在 TypeScript 中是一個非常有用的工具,它提供了靜態型別檢查,確保物件符合定義的結構,從而提高程式碼的穩定性和可維護性。透過介面,我們可以定義物件的形狀、描述函數的參數和回傳值、以及擴展其他介面,讓程式更具彈性和可讀性。在大型專案中,介面能夠有效地幫助開發者保持程式碼的一致性,並減少錯誤的發生。


上一篇
Day09:TypeScript 的聯合型別
下一篇
Day11:TypeScript 的型別別名 (Type Aliases)
系列文
用 TypeScript 重新定義前端開發:30 天的實踐與思考30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言