TypeScript泛型使用詳細(xì)介紹
1 什么是泛型
泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。

泛型使用<T>來定義類型,<T>中的T可以是U也可以是其他合法的字母,建議大寫。泛型可以理解為不確定單獨(dú)類型,函數(shù)中使用泛型,可以約束函數(shù)的參數(shù)和返回值類型相同。
2 泛型方法
當(dāng)定義identity函數(shù)時(shí),這個(gè)函數(shù)會(huì)返回任何傳入它的值,不用泛型的話,這個(gè)函數(shù)可能是下面這樣:
function identity(arg: number): number {
return arg;
}
但是這樣的話,參數(shù)和返回值規(guī)定了必須為number類型。如果我們不確定它們的類型,要怎么寫呢,我們可能會(huì)使用any類型來定義函數(shù):
function identity(arg: any): any {
return arg;
}
但是使用any類型會(huì)導(dǎo)致這個(gè)函數(shù)可以接收任何類型的arg參數(shù),這樣就丟失了一些信息:傳入的類型與返回的類型應(yīng)該是相同的。如果我們傳入一個(gè)數(shù)字,任何類型的值都有可能被返回。
對(duì)于這個(gè)問題,我們就可以使用類型變量來解決。類型變量是一種特殊的變量,只用于表示類型而不是值。它的語法格式為:
function 函數(shù)名<T>(參數(shù): T): T {
return 值;
}
示例代碼:
function identity<T>(arg: T): T {
return arg;
}
給identity添加了類型變量T。 T幫助我們捕獲用戶傳入的類型(比如:number),之后我們就可以使用這個(gè)類型。 之后我們再次使用了 T當(dāng)做返回值類型?,F(xiàn)在我們可以知道參數(shù)類型與返回值類型是相同的了。 這允許我們跟蹤函數(shù)里使用的類型的信息。
定義了泛型方法后,可以用兩種方法使用。
// 第一種:傳入所有的參數(shù),包含類型參數(shù)
var a = identity<string>("myString");
// 第二種:使用類型推論——即編譯器會(huì)根據(jù)傳入的參數(shù)自動(dòng)地幫助我們確定T的類型
var a = identity("myString");3 泛型類
當(dāng)我們需要實(shí)現(xiàn)找最小數(shù)的算法時(shí),并且需要同時(shí)支持返回?cái)?shù)字和字符串兩種類型,就可以通過類的泛型來實(shí)現(xiàn)。
示例代碼: 非泛型實(shí)現(xiàn)方式
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;
}
}示例代碼:泛型方式實(shí)現(xiàn)
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 泛型接口
首先來看一下普通函數(shù)接口:
interface ConfigFn { // 普通函數(shù)接口
(value1: string, value2: string): string;
}
那么如果將它轉(zhuǎn)換成泛型接口呢?有下面兩種方法:
1、第一種定義方式
interface ConfigFn {
<T>(value: T): T; // T表示參數(shù)類型
}
2、第二種方式
interface ConfigFn<T> {
(value: T): T; // T表示參數(shù)類型
}
到此這篇關(guān)于TypeScript泛型使用詳細(xì)介紹的文章就介紹到這了,更多相關(guān)TypeScript泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js下獲得客戶端操作系統(tǒng)的函數(shù)代碼(1:vista,2:windows7,3:2000,4:xp,5:2003,6:20
有時(shí)候需要在客戶端獲取操作系統(tǒng)的版本,以便更好的給用戶合適的信息,提高用戶體驗(yàn),好不容易從網(wǎng)站發(fā)現(xiàn)了這段代碼,分享給大家。2011-10-10
JS實(shí)現(xiàn)將Asp.Net的DateTime Json類型轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間的方法
這篇文章主要介紹了JS實(shí)現(xiàn)將Asp.Net的DateTime Json類型轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間的方法,涉及javascript針對(duì)時(shí)間與日期操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08
SpringMVC+bootstrap table實(shí)例詳解
本文通過實(shí)例給大家介紹了SpringMVC+bootstrap-table,需要的朋友可以參考下2017-06-06
在js代碼拼接dom對(duì)象到頁面上去的模板總結(jié)(必看)
下面小編就為大家?guī)硪黄趈s代碼拼接dom對(duì)象到頁面上去的模板總結(jié)(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
微信公眾號(hào)獲取用戶地理位置并列出附近的門店的示例代碼
這篇文章主要介紹了微信公眾號(hào)獲取用戶地理位置并列出附近的門店的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
js 兼容多瀏覽器的回車和鼠標(biāo)焦點(diǎn)事件代碼(IE6/7/8,firefox,chrome)
本文講一下js實(shí)現(xiàn)兼容IE6/7/8,firefox,chrome瀏覽器的回車和鼠標(biāo)焦點(diǎn)事件的代碼。2010-04-04
js抽獎(jiǎng)實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)代碼效果
這篇文章主要介紹了js隨機(jī)抽獎(jiǎng)代碼效果,大家參考使用2013-12-12
詳談js中window.location.search的用法和作用
下面小編就為大家?guī)硪黄斦刯s中window.location.search的用法和作用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
JavaScript設(shè)計(jì)模式---單例模式詳解【四種基本形式】
這篇文章主要介紹了JavaScript設(shè)計(jì)模式---單例模式,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript設(shè)模式中單例模式的四種基本形式定義與使用方法,需要的朋友可以參考下2020-05-05

