TypeScript(泛型)

泛型

軟件工程中,我們不僅要?jiǎng)?chuàng)建一致的定義良好的API,同時(shí)也要考慮可重用性。 組件不僅能夠支持當(dāng)前的數(shù)據(jù)類型库说,同時(shí)也能支持未來的數(shù)據(jù)類型,這在創(chuàng)建大型系統(tǒng)時(shí)為你提供了十分靈活的功能片择。
在像C#和Java這樣的語言中潜的,可以使用泛型來創(chuàng)建可重用的組件,一個(gè)組件可以支持多種類型的數(shù)據(jù)字管。 這樣用戶就可以以自己的數(shù)據(jù)類型來使用組件啰挪。

創(chuàng)建第一個(gè)使用泛型的例子:identity函數(shù)信不。 這個(gè)函數(shù)會(huì)返回任何傳入它的值。 你可以把這個(gè)函數(shù)當(dāng)成是 echo命令亡呵。
不使用泛型:

function identity(arg: number): number {
    return arg;
}
//或者使用any來定義函數(shù)
function identity(arg: any): any {
    return arg;
}

雖然使用any類型后這個(gè)函數(shù)已經(jīng)能接收任何類型的arg參數(shù)抽活,但是卻丟失了一些信息:傳入的類型與返回的類型應(yīng)該是相同的。 如果我們傳入一個(gè)數(shù)字政己,我們只知道任何類型的值都有可能被返回。
因此掏愁,我們需要一種方法使返回值的類型與傳入?yún)?shù)的類型是相同的歇由。 這里,我們使用了 類型變量果港,它是一種特殊的變量沦泌,只用于表示類型而不是值。

function identity<T>(arg: T): T {
    return arg;
}

我們給identity添加了類型變量T辛掠。 T幫助我們捕獲用戶傳入的類型(比如:number)谢谦,之后我們就可以使用這個(gè)類型。 之后我們?cè)俅问褂昧?T當(dāng)做返回值類型÷荞茫現(xiàn)在我們可以知道參數(shù)類型與返回值類型是相同的了回挽。 這允許我們跟蹤函數(shù)里使用的類型的信息。
我們把這個(gè)版本的identity函數(shù)叫做泛型猩谊,因?yàn)樗梢赃m用于多個(gè)類型千劈。 不同于使用 any,它不會(huì)丟
我們定義了泛型函數(shù)后牌捷,可以用兩種方法使用墙牌。失信息,像第一個(gè)例子那像保持準(zhǔn)確性暗甥,傳入數(shù)值類型并返回?cái)?shù)值類型喜滨。

let output = identity<string>("myString");  // type of output will be 'string'

這里我們明確的指定了T是string類型,并做為一個(gè)參數(shù)傳給函數(shù)撤防,使用了<>括起來而不是()虽风。
第二種方法更普遍。利用了類型推論 -- 即編譯器會(huì)根據(jù)傳入的參數(shù)自動(dòng)地幫助我們確定T的類型:

let output = identity("myString");  // type of output will be 'string'

注意我們沒必要使用尖括號(hào)(<>)來明確地傳入類型寄月;編譯器可以查看myString的值焰情,然后把T設(shè)置為它的類型。 類型推論幫助我們保持代碼精簡(jiǎn)和高可讀性剥懒。如果編譯器不能夠自動(dòng)地推斷出類型的話内舟,只能像上面那樣明確的傳入T的類型,在一些復(fù)雜的情況下初橘,這是可能出現(xiàn)的验游。

泛型類型

泛型函數(shù)的類型與非泛型函數(shù)的類型沒什么不同充岛,只是有一個(gè)類型參數(shù)在最前面,像函數(shù)聲明一樣:

function identity<T>(arg: T): T {
    return arg;
}
let myIdentity: <T>(arg: T) => T = identity;

泛型類

泛型類看上去與泛型接口差不多耕蝉。 泛型類使用( <>)括起泛型類型崔梗,跟在類名后面。

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; };
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垒在,一起剝皮案震驚了整個(gè)濱河市蒜魄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌场躯,老刑警劉巖谈为,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踢关,居然都是意外死亡伞鲫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門签舞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秕脓,“玉大人,你說我怎么就攤上這事儒搭》图埽” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵搂鲫,是天一觀的道長(zhǎng)诵肛。 經(jīng)常有香客問我,道長(zhǎng)默穴,這世上最難降的妖魔是什么怔檩? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蓄诽,結(jié)果婚禮上薛训,老公的妹妹穿的比我還像新娘。我一直安慰自己仑氛,他們只是感情好乙埃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锯岖,像睡著了一般介袜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上出吹,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天遇伞,我揣著相機(jī)與錄音,去河邊找鬼捶牢。 笑死鸠珠,一個(gè)胖子當(dāng)著我的面吹牛巍耗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渐排,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炬太,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了驯耻?” 一聲冷哼從身側(cè)響起亲族,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎可缚,沒想到半個(gè)月后霎迫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡城看,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年女气,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杏慰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片测柠。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缘滥,靈堂內(nèi)的尸體忽然破棺而出轰胁,到底是詐尸還是另有隱情,我是刑警寧澤朝扼,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布赃阀,位于F島的核電站,受9級(jí)特大地震影響擎颖,放射性物質(zhì)發(fā)生泄漏榛斯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一搂捧、第九天 我趴在偏房一處隱蔽的房頂上張望驮俗。 院中可真熱鬧,春花似錦允跑、人聲如沸王凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽索烹。三九已至,卻和暖如春弱睦,著一層夾襖步出監(jiān)牢的瞬間百姓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工况木, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓣戚,地道東北人端圈。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像子库,于是被迫代替她去往敵國(guó)和親舱权。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本章將會(huì)介紹 泛型所解決的問題泛型函數(shù)類型參數(shù)命名類型參數(shù)泛型類型擴(kuò)展一個(gè)泛型類型類型約束關(guān)聯(lián)類型泛型 Where...
    寒橋閱讀 634評(píng)論 0 2
  • 泛型代碼可以確保你寫出靈活的仑嗅,可重用的函數(shù)和定義出任何你所確定好的需求的類型宴倍。你的可以寫出避免重復(fù)的代碼,并且用一...
    iOS_Developer閱讀 798評(píng)論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,802評(píng)論 1 10
  • 分享一次接待沙發(fā)客的經(jīng)歷仓技。 某年十一黃金周鸵贬,杭州正處旅游高峰,室友剛剛搬走脖捻,一間臥室空了出來阔逼,突然想起豆瓣上的沙發(fā)...
    李少白閱讀 703評(píng)論 1 1
  • 今天遇到了兩件事情給我印象深刻,都是關(guān)于電商的地沮。 一嗜浮、美國(guó)電商亞馬遜。 昨天一早看到好友在群里留言摩疑,“話說我上月試...
    海咸河淡閱讀 160評(píng)論 0 2