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

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

TypeScript 高級語法——泛型

2023-07-24 17:03 作者:沒用軟件開發(fā)日記  | 我要投稿

????基于前一篇對函數(shù)的基礎(chǔ)認知我們可以更進一步了。

? ? 在官方文檔上有這樣一個例子,例子中我們在函數(shù)名后使用“<Type>”標(biāo)記該函數(shù)為泛型函數(shù),在實際使用中會根據(jù)實際使用的場景確定泛型占位標(biāo)記Type的真實值。比如在使用firstElement1時Type為參數(shù)arr的類型,所以因為[ 1,2,3?]的類型為Array<number>,則泛型占位Type的實際值為number[ ]。我們也可以顯式的指定泛型占位標(biāo)志的類型,如上例中被注掉的部分,多數(shù)時候我們都不需要顯式聲明,因為基于類型推斷就已經(jīng)能達到很好的效果。

????在firstElement2函數(shù)中出現(xiàn)了“extends”關(guān)鍵字其意義表示為:類型Type是可以適配any數(shù)組的類型,官方稱之為泛型約束,因為number數(shù)組是any數(shù)組的子集,所以將下方的firstElement1替換成firstElement2也一樣可以正常運行。

????上述泛型約束的例子只是為說明其邏輯的最簡單示例,現(xiàn)實場景中需要開發(fā)人員為泛型提供有效約束,而不是any這種泛泛的約束(和沒約束沒什么區(qū)別),有效約束是比如泛型類型中必須有名為name 的字段之類,以下為正確示例:

????在聲明泛型函數(shù)時往往應(yīng)該遵循最小泛型數(shù)量的設(shè)計:

????在上例中filter1的可讀性是完全高于filter2的,更少的泛型聲明帶給開發(fā)者的是更好的可讀性與更少的神志負擔(dān),我們可以從函數(shù)體的類型依賴中推斷出函數(shù)需要幾個泛型占位標(biāo)記(每種未在開發(fā)時確定的依賴類型算一個)。

????interface也可以增加泛型標(biāo)記,如上所示和泛型函數(shù)不同的是泛型接口必須顯式的指定類型,上例的AppleBox是一個為確定實現(xiàn)的泛型接口起別名的操作,其中的泛型實現(xiàn)Apple是另一個接口。

????介紹泛型的同時介紹一個只讀數(shù)組類型ReadonlyArray,ReadonlyArray是TS定義的一個只讀泛型數(shù)組類型,本質(zhì)是一個泛型接口,其與Array類型最大的差異是ReadonlyArray不可被修改(無法使用具有副作用的函數(shù),例如:push)。

????泛型類和泛型接口完全相同,唯一的區(qū)別是類是ES標(biāo)準(zhǔn)中的概念,打包后依然以JS代碼的形式存在,只不過屬于類型描述的部分(泛型、參數(shù)類型聲明)都消失了;而接口是TS的概念,無法轉(zhuǎn)換為JS代碼,所以泛型接口不會出現(xiàn)在打包后的代碼中。

TypeScript 高級語法——泛型的評論 (共 條)

分享到微博請遵守國家法律
玉山县| 洪雅县| 武陟县| 龙海市| 合阳县| 甘洛县| 南城县| 额济纳旗| 宜兴市| 磴口县| 威远县| 宜阳县| 凤城市| 黄浦区| 布尔津县| 临朐县| 衡水市| 佳木斯市| 安顺市| 乐清市| 泸定县| 都江堰市| 长宁区| 锡林浩特市| 江安县| 冷水江市| 昭苏县| 昌乐县| 三门县| 安顺市| 阳朔县| 隆德县| 黑山县| 白银市| 卓资县| 西和县| 汽车| 乐昌市| 岑溪市| 双牌县| 胶南市|