TypeScript 泛型型別
由於作者本人也利用C#開發專案,深知泛型的便利性,可以建立支援多種資料型別的元件。
作為微軟的產品,可以有根據的猜測TypeScript中的泛型應該也有類似功能。
下面節通過程式碼例項介紹一下TypeScript中泛型的用法。
首先看一段程式碼例項:
[typescript] 純文字檢視 複製程式碼function identity(arg: number): number { return arg; }
上述程式碼建立一個函式,並且限定函式引數和返回值都為number型別。
為了增加靈活性,程式碼修改如下:
[typescript] 純文字檢視 複製程式碼function identity(arg: any): any { return arg; }
上面程式碼規定函式引數和返回值型別都是any。
關於any型別可以參閱TypeScript Any型別一章節。
Any型別缺點也比較明顯,可以傳遞任何型別資料,但不能保證返回值型別和傳遞進來引數型別一致。
假設給函式傳遞“螞蟻部落”,我們只知道返回值型別是Any,不知道具體何種型別。
[typescript] 純文字檢視 複製程式碼function identity<T>(arg: T): T { return arg; }
給函式新增型別變數T(使用尖括號<>包裹),它可以捕獲使用者傳入引數的型別,並且使用T作為返回值型別。
上面就是對泛型函式的描述,它可以保證傳遞進函式的引數型別與返回值型別完全一致。
泛型函式適用於多種型別,相較於使用any型別,它不會丟失型別資訊。
泛型函式的呼叫:
[typescript] 純文字檢視 複製程式碼let str = identity<string>("螞蟻部落");
傳入所有引數,包括尖括號中的型別引數。
[typescript] 純文字檢視 複製程式碼let str = identity("螞蟻部落");
省略泛型的型別引數,編譯器可以根據傳遞的引數自動推斷T的型別。
特別說明:表示泛型的T並不是固定的,可以使用其他字元,例如U。
前面以泛型函式為例子,介紹了泛型的基本概念和用法,下面再來介紹一下泛型函式的型別。
關於非泛型函式型別可以參閱TypeScript 函式型別一章節。
[typescript] 純文字檢視 複製程式碼function identity<T>(arg: T): T { return arg; } let myIdentity: <T>(arg: T) => T = identity;
和普通函式的區別是,在函式簽名宣告的前面加上泛型型別引數<T>。
[typescript] 純文字檢視 複製程式碼function identity<T>(arg: T): T { return arg; } let myIdentity: {<T>(arg: T): T} = identity;
可以使用帶有呼叫簽名的物件字面量來定義泛型函式。
相關文章
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- TypeScript 泛型介面和泛型類TypeScript泛型
- TypeScript 泛型相容TypeScript泛型
- TypeScript 泛型限定TypeScript泛型
- TypeScript 工具泛型TypeScript泛型
- TypeScript基礎--泛型TypeScript泛型
- TypeScript 官方手冊翻譯計劃【六】:型別操控-泛型TypeScript型別泛型
- 型別 VS 泛型型別泛型
- TypeScript this型別TypeScript型別
- 泛型型別(.NET 指南)泛型型別
- TypeScript 型別相容TypeScript型別
- TypeScript 交叉型別TypeScript型別
- Typescript:基本型別TypeScript型別
- TypeScript 字串型別TypeScript字串型別
- TypeScript Never型別TypeScript型別
- TypeScript Any型別TypeScript型別
- TypeScript 索引型別TypeScript索引型別
- TypeScript 型別安全TypeScript型別
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- Java™ 教程(泛型原始型別)Java泛型型別
- 型別與泛型標記型別泛型
- Scala 泛型型別和方法泛型型別
- Java泛型與型別擦除Java泛型型別
- TypeScript 2.1中的型別運算 & 一個遞迴的Readonly泛型TypeScript型別遞迴泛型
- TypeScript學習(四)—— 介面和泛型TypeScript泛型
- TypeScript type 型別別名TypeScript型別
- Java泛型型別擦除問題Java泛型型別
- TypeScript型別系統和基礎型別TypeScript型別
- TypeScript 型別系統TypeScript型別
- Typescript高階型別TypeScript型別
- TypeScript 聯合型別TypeScript型別
- TypeScript 型別保護TypeScript型別
- TypeScript 型別推斷TypeScript型別
- TypeScript 型別斷言TypeScript型別
- TypeScript void 型別TypeScript型別
- TypeScript 陣列型別TypeScript陣列型別
- TypeScript 函式型別TypeScript函式型別
- TypeScript 數值型別TypeScript型別