TypeScript泛型使用詳細介紹
1 什么是泛型
泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。
泛型使用<T>
來定義類型,<T>
中的T可以是U也可以是其他合法的字母,建議大寫。泛型可以理解為不確定單獨類型,函數中使用泛型,可以約束函數的參數和返回值類型相同。
2 泛型方法
當定義identity函數時,這個函數會返回任何傳入它的值,不用泛型的話,這個函數可能是下面這樣:
function identity(arg: number): number { return arg; }
但是這樣的話,參數和返回值規(guī)定了必須為number類型。如果我們不確定它們的類型,要怎么寫呢,我們可能會使用any類型來定義函數:
function identity(arg: any): any { return arg; }
但是使用any類型會導致這個函數可以接收任何類型的arg參數,這樣就丟失了一些信息:傳入的類型與返回的類型應該是相同的。如果我們傳入一個數字,任何類型的值都有可能被返回。
對于這個問題,我們就可以使用類型變量來解決。類型變量是一種特殊的變量,只用于表示類型而不是值。它的語法格式為:
function 函數名<T>(參數: T): T { return 值; }
示例代碼:
function identity<T>(arg: T): T { return arg; }
給identity添加了類型變量T。 T幫助我們捕獲用戶傳入的類型(比如:number),之后我們就可以使用這個類型。 之后我們再次使用了 T當做返回值類型。現在我們可以知道參數類型與返回值類型是相同的了。 這允許我們跟蹤函數里使用的類型的信息。
定義了泛型方法后,可以用兩種方法使用。
// 第一種:傳入所有的參數,包含類型參數 var a = identity<string>("myString"); // 第二種:使用類型推論——即編譯器會根據傳入的參數自動地幫助我們確定T的類型 var a = identity("myString");
3 泛型類
當我們需要實現找最小數的算法時,并且需要同時支持返回數字和字符串兩種類型,就可以通過類的泛型來實現。
示例代碼: 非泛型實現方式
class MinClass { list: number[] = []; add(num: number) { this.list.push(num); } min(): number { var minNum = this.list[0]; for (var i = 0; i < this.list.length; i++) { if (minNum > this.list[i]) { minNum = this.list[i]; } } return minNum; } }
示例代碼:泛型方式實現
class MinClass<T> { list: T[] = []; add(num: T) { this.list.push(num); } min(): T { var minNum = this.list[0]; for (var i = 0; i < this.list.length; i++) { if (minNum > this.list[i]) { minNum = this.list[i]; } } return minNum; } }
4 泛型接口
首先來看一下普通函數接口:
interface ConfigFn { // 普通函數接口 (value1: string, value2: string): string; }
那么如果將它轉換成泛型接口呢?有下面兩種方法:
1、第一種定義方式
interface ConfigFn { <T>(value: T): T; // T表示參數類型 }
2、第二種方式
interface ConfigFn<T> { (value: T): T; // T表示參數類型 }
到此這篇關于TypeScript泛型使用詳細介紹的文章就介紹到這了,更多相關TypeScript泛型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
js下獲得客戶端操作系統(tǒng)的函數代碼(1:vista,2:windows7,3:2000,4:xp,5:2003,6:20
有時候需要在客戶端獲取操作系統(tǒng)的版本,以便更好的給用戶合適的信息,提高用戶體驗,好不容易從網站發(fā)現了這段代碼,分享給大家。2011-10-10JS實現將Asp.Net的DateTime Json類型轉換為標準時間的方法
這篇文章主要介紹了JS實現將Asp.Net的DateTime Json類型轉換為標準時間的方法,涉及javascript針對時間與日期操作的相關技巧,需要的朋友可以參考下2016-08-08js 兼容多瀏覽器的回車和鼠標焦點事件代碼(IE6/7/8,firefox,chrome)
本文講一下js實現兼容IE6/7/8,firefox,chrome瀏覽器的回車和鼠標焦點事件的代碼。2010-04-04詳談js中window.location.search的用法和作用
下面小編就為大家?guī)硪黄斦刯s中window.location.search的用法和作用。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02JavaScript設計模式---單例模式詳解【四種基本形式】
這篇文章主要介紹了JavaScript設計模式---單例模式,結合實例形式詳細分析了JavaScript設模式中單例模式的四種基本形式定義與使用方法,需要的朋友可以參考下2020-05-05