在 TypeScript 中,介面 (Interface) 是一種用來定義物件結構的合約。它為物件的屬性和方法提供了明確的描述,確保物件符合介面中定義的結構和行為。介面可以視為一種藍圖,用於定義物件的形狀,而不具體實作邏輯。這種結構化的設計讓 TypeScript 在靜態型別檢查時更有效率,避免不符合預期的型別錯誤。
介面的主要目的是規範程式碼的型別,使程式在編譯階段就可以發現型別不匹配的問題,從而減少程式執行時的錯誤。透過介面,開發者可以定義物件、函數、類別等的型別,並強制實作方遵守這些定義。
在 TypeScript 中,介面可以用來定義物件的屬性和方法。語法非常簡單,使用 interface
關鍵字做型別註記即可。
我們可以使用介面來定義一個物件應該包含哪些屬性及其型別:
interface Person {
name: string;
age: number;
skill?: string; // 可選屬性
}
const Annie: Person = {
name: 'John Doe',
age: 18,
};
在這個例子裡,介面 Person
定義了物件的結構,其中包含了兩個必須的屬性 name
和 age
,以及一個可選屬性 skill
。透過這樣的設計,當我們定義一個變數 Annie
時,TypeScript 會檢查它是否符合 Person
介面的結構。如果少了必須的屬性,TypeScript 會在編譯時報錯,從而減少潛在的問題。
介面也可以用來定義函數的參數型別:
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
函數的參數型別。這樣做不僅增加了程式碼的可讀性,也保證了傳入的參數符合預期的型別。
介面可以透過 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
必須包含 name
、age
和 color
這三個屬性。
介面在 TypeScript 中是一個非常有用的工具,它提供了靜態型別檢查,確保物件符合定義的結構,從而提高程式碼的穩定性和可維護性。透過介面,我們可以定義物件的形狀、描述函數的參數和回傳值、以及擴展其他介面,讓程式更具彈性和可讀性。在大型專案中,介面能夠有效地幫助開發者保持程式碼的一致性,並減少錯誤的發生。