国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

TypeScript 中如何聲明函數(shù)?

2023-05-17 21:05 作者:寫代碼的寶哥  | 我要投稿

TypeScript 中如何聲明函數(shù)

函數(shù)(在對象中又叫做方法),是編碼中最普遍存在和使用的一種對象。本節(jié)學(xué)習(xí)如何在 TypeScript 中聲明函數(shù),方便我們開發(fā)。

將從以下 6 個方面來講:類型表達式、調(diào)用簽名、構(gòu)造簽名、函數(shù)重載、泛型函數(shù)、可選參數(shù)。


一、類型表達式(Function Type Expressions)

函數(shù)類型表達式(Function Type Expressions)是最簡單聲明函數(shù)的方式。語法類似 (s: string) => void,使用胖箭頭 => 分隔參數(shù)列表和返回值類型。


二、調(diào)用簽名(Call Signatures)

這是為了滿足聲明那些包含屬性的函數(shù)。JavaScript 中函數(shù)就是一類特殊的對象。

比如我們有一個函數(shù) doSomething,接收一個函數(shù)類型參數(shù) fn,fn 類型如下:

  1. 接收一個數(shù)值類型 number 的參數(shù)調(diào)用,返回布爾類型

  2. 還包含一個字符串類型屬性 description


注意,這里聲明函數(shù)使用的是冒號 : 而非胖箭頭 =>,對象類型中是采用 k: v 形式指定鍵值對的。

三、構(gòu)造簽名(Construct Signatures)

構(gòu)造函數(shù)聲明類似函數(shù)調(diào)用聲明,不過多了一個 new 前綴。


當(dāng)然,調(diào)用簽名和構(gòu)造簽名可以同時使用,


四、函數(shù)重載(Function Overloads)

有時某個函數(shù)可能要支持不同參數(shù)的調(diào)用形式。假設(shè)有一個函數(shù) makeDate() 來說:

  • 既支持通過時間戳(number 類似)來創(chuàng)建日期對象

  • 也支持通過月(m)、日(d)、年(y)來創(chuàng)建日期對象

如何定義這個 makeDate() 函數(shù)?


這時候就要用到函數(shù)重載了。


五、泛型函數(shù)(Generic Functions)

設(shè)想這樣一個場景,我有一個函數(shù),獲取數(shù)組的第一個元素。返回值類型取決于傳入的數(shù)組。

比如:傳入的是 number[] 類型,那么返回 number;傳入的是 string[] 類型,那么返回 string。

我們可以用函數(shù)重載來實現(xiàn):


但不夠靈活。因為返回值類型取決于傳入的數(shù)組,所以我們可以抽象出一個泛型 T 來表示數(shù)組元素類型。


泛型 T 是一種特殊的類型,依賴實際調(diào)用場景。函數(shù)中泛型的聲明放在函數(shù)名之后,用尖括號 <> 包裹。

對應(yīng)到本例,我們聲明了一個函數(shù) firstElem2,其接收一個元素類型為“T”的數(shù)組,函數(shù)返回值類型關(guān)聯(lián)數(shù)組元素類型——返回 T(有元素) 或者 undefined(無元素)。

當(dāng)我們使用 [1, 2, 3, 4] 調(diào)用 firstElem2() 函數(shù)時,TypeScript 推導(dǎo)泛型 T 即是 number 類型,繼而推導(dǎo)返回類型為 number | undefiend。后續(xù)使用 ['1', '2', '3', '4'] 以及 [true, false] 調(diào)用,原理類似。

使用泛型可以簡化我們的函數(shù)類型聲明。

當(dāng)然,還能「同時使用多個泛型、對泛型類型做約束」

  1. 使用多個泛型

泛型間使用逗號隔開。


  1. 對泛型類型做約束

使用 extends 關(guān)鍵字來約束泛型范圍。


六、可選參數(shù)(Optional Parameters)

與在 interface 中聲明對象類型的可選屬性類似,可選參數(shù)也是使用的 ?:


TypeScript 中如何聲明函數(shù)?的評論 (共 條)

分享到微博請遵守國家法律
奉新县| 景洪市| 包头市| 车致| 新丰县| 科技| 苏尼特右旗| 潞城市| 东丽区| 沾化县| 江门市| 柘城县| 临澧县| 营山县| 阿图什市| 英吉沙县| 乐业县| 阳西县| 孟州市| 余干县| 松江区| 无锡市| 巨野县| 石渠县| 崇礼县| 许昌县| 乌鲁木齐县| 庐江县| 沁阳市| 项城市| 孙吴县| 庄浪县| 桑植县| 仁寿县| 鹤峰县| 土默特右旗| 中江县| 皋兰县| 台北县| 开封市| 富锦市|