目錄
TypeScript 泛型(Generics)的多類型參數
TypeScript 泛型(Generics)是一種強大的工具,讓開發者在定義函式、類別或接口時,可以靈活地接受多種類型的參數,而不必指定具體的類型。這樣的設計使得程式碼更具可重用性和可維護性,尤其在大型應用程式中更為重要。
泛型的基本語法
在 TypeScript 中,泛型的語法是使用 angle brackets 來定義參數的類型。以下是基本的泛型函式範例:
function identity<T>(arg: T): T {
return arg;
}
在上面的程式碼中,我們定義了一個名為 identity
的函式,它接受一個參數 arg
,並返回相同的參數。這裡的 T
是一個型別變數,它代表一個未知的類型,具體類型在函式調用時決定。
使用泛型函式
我們可以使用不同的類型來呼叫 identity
函式:
let output = identity<string>("myString"); // type of output will be 'string'
此外,我們也可以利用型別推斷來簡化上述程式碼:
let output = identity("myString"); // type of output will be 'string'
泛型在類別和接口中的應用
泛型同樣可以用於類別和接口,以下是定義泛型類別的範例:
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
在這段程式碼中,我們定義了一個名為 GenericNumber
的類別,它接受一個參數 T
,代表一個未知的類型,具體類型在類別實例化時決定。
錯誤排除與最佳實踐
在使用泛型時,開發者需注意以下幾點以避免常見錯誤:
- 確保在使用泛型時,傳入的類型與函式或類別的定義相符。
- 使用型別約束(Type Constraints)來限制泛型的型別,例如,
<T extends SomeType>
。 - 在函式中使用多個泛型時,確保每個泛型的定義都是清晰的。
延伸應用與學習資源
TypeScript 泛型的多類型參數能夠讓你在定義函式、類別或接口時,更加彈性地接受不同的參數。這不僅使程式碼更加簡潔,還能提高維護性。以下是一些推薦的資源,幫助你深入學習 TypeScript 泛型:
- Typescript Generics
- Typescript Generics Handbook
- Typescript Generics: What, Why and How
- Understanding Typescript Generics
- Typescript Generics Explained in Plain English
Q&A(常見問題解答)
1. 泛型與具體類型有什麼區別?
泛型允許函式或類別在不具體指定類型的情況下操作多種類型,而具體類型則是指明確的資料類型,例如 string
或 number
。
2. 如何在 TypeScript 中定義多個泛型?
可以在函式或類別的型別參數中使用逗號分隔來定義多個泛型,例如 <T, U>
。
3. 泛型的使用場景有哪些?
泛型非常適合用於創建可重用的函式和類別,特別是在處理集合、資料結構和 API 互動時。
—