一、 泛型是什么
軟件工程中,我們不僅要創(chuàng)建一致的定義良好的 API ,同時也要考慮可重用性。 組件不僅能夠支持當前的數(shù)據(jù)類型,同時也能支持未來的數(shù)據(jù)類型,這在創(chuàng)建大型系統(tǒng)時為你提供了十分靈活的功能。
在像 C# 和 Java 這樣的語言中,可以使用泛型來創(chuàng)建可重用的組件,一個組件可以支持多種類型的數(shù)據(jù)。 這樣用戶就可以以自己的數(shù)據(jù)類型來使用組件。
—— 官方文檔介紹
官方文檔說的有點暈,不過既然介紹提到了 Java ,那就看看泛型在 Java 的解釋:
Java 泛型是 J2 SE1.5 中引入的一個新特性,其本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)(type parameter)這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。
—— 百度百科
對于參數(shù)我們就比較熟悉了,在定義函數(shù)的時候?qū)懭胄螀?,后面調(diào)用的時候再傳入具體的實參;同樣的,參數(shù)化類型也就是將原先的具體的類型當做一個參數(shù)來處理,在定義階段就相當于定義函數(shù)時候的形參一樣,沒有指定的類型,只是相當于一個占位符的作用,而后在使用階段的時候根據(jù)傳入的類型來確定。
也就是說在泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個參數(shù),這種參數(shù)類型可以用在類、接口和方法中,也就被分別稱為泛型類、泛型接口、泛型方法。
TypeScript泛型類型參數(shù)的實際命名約定非常一致:使用單個大寫字符,或者對應(yīng)于它們所表示的第一個字母,例如:
- T為“type”,是最通用的,因此也是最常用的類型參數(shù)名;
- K表示“key”,或P表示“property”,兩者都傾向于受PropertyKey或keyof T或keyof SomeInterface或keyof SomeClass的約束;
- V表示“value”,最常用作成對使用,K表示“key”;
- A表示“arguments”,R表示“return”,分別對應(yīng)函數(shù)簽名的rest參數(shù)列表和返回類型,如(...args: A) => R;
- N表示“number”,S表示“string”,B表示“boolean”,表示受原語約束的類型參數(shù);