最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ù)?的評論 (共 條)

分享到微博請遵守國家法律
平南县| 裕民县| 孝感市| 齐河县| 江北区| 河曲县| 江华| 灵台县| 聂拉木县| 新闻| 楚雄市| 昌宁县| 沅江市| 武宁县| 科技| 东平县| 乌兰察布市| 江津市| 襄垣县| 六盘水市| 天等县| 海伦市| 保靖县| 黑河市| 河东区| 南充市| 山东省| 滦南县| 宝兴县| 柳河县| 凉山| 崇文区| 隆回县| 天祝| 昭苏县| 南昌市| 桃园县| 青田县| 马关县| 盘锦市| 昌邑市|