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

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

TypeScript 類型基礎(chǔ)——類型收窄

2023-07-21 16:29 作者:沒用軟件開發(fā)日記  | 我要投稿

????類型收窄的目的等同于接口隔離原則ISP的目的,只把消費(fèi)者需要的提供給消費(fèi)者。

????這是一個(gè)類型收窄最簡(jiǎn)單的例子,因?yàn)間etName函數(shù)內(nèi)部只用到了info類進(jìn)對(duì)象中的name字段,所以在參數(shù)位置使用解包的形式,將參數(shù)對(duì)象中的name字段提取出來。這樣做屏蔽了其他不需要了解的細(xì)節(jié),讓函數(shù)真正的專注于某一功能。

????之前講過的將子類型對(duì)象傳給需要其基類的函數(shù)和此例是沒有關(guān)聯(lián)的,因?yàn)楸粋魅氲膶?duì)象沒有真的因?yàn)楹瘮?shù)的參數(shù)類型被標(biāo)記為其基類,就真的只將自己基類部分字段傳入。這只是TS的編譯期魔法,在運(yùn)行時(shí)因?yàn)闉g覽器無法解析TS語(yǔ)言,所以實(shí)際上瀏覽器執(zhí)行的是TS編譯后的JS結(jié)果,也就是說傳入函數(shù)的依然是整個(gè)子類型對(duì)象。

????這個(gè)示例是一個(gè)聯(lián)合類型拆解的最簡(jiǎn)單方案,利用typeof操作符判定對(duì)象類型執(zhí)行不同的操作,在每個(gè)if分支體現(xiàn)的同樣是類型收窄的思想。

????當(dāng)然了typeof無法很好的判斷復(fù)雜類型,比如Date或者我們自定義的class,這個(gè)時(shí)候我們可以使用“instanceof”操作符來判斷類型,已達(dá)到類型收窄的目的。

? ? 這是TS官方文檔上的一個(gè)高端的例子,在這個(gè)例子中使用“in”操作符判斷字段是否存在于對(duì)象中,TS很聰明的發(fā)現(xiàn)Bird類型中不存在swim字段,所以如果animal參數(shù)內(nèi)包含swim那么它一定是Fish。

????在官方文檔上有這樣一個(gè)例子,當(dāng)我們過濾一個(gè)聯(lián)合類型的數(shù)組時(shí),我們通常過濾的結(jié)果類型一致,這時(shí)候我們可以使用“類型謂詞”來標(biāo)定類型。通過pet is Fish,我們可以提示TS:該函數(shù)的參數(shù)雖然是聯(lián)合類型但是事實(shí)上被傳入的對(duì)象都符合Fish類型描述,再配合函數(shù)內(nèi)部的對(duì)Fish的精準(zhǔn)判斷,那么zoo函數(shù)被filter后就只會(huì)返回只含有Fish類型的數(shù)組了,此時(shí)underWater1的類型也會(huì)被標(biāo)記為Fish[ ]。

????在使用策略模式時(shí),我們需要的更多的是確定的值而不是string這種泛泛的類型,在上面的例子中我們使用“as const”來將原本的string[ ]類型轉(zhuǎn)換成類型readonly ["1", "2", "3"]類型,也就是說即使我們?yōu)閍rr重新賦值也只能是["1", "2", "3"],這樣在下面的forof循環(huán)中iterator的類型就是“1”、“2”、“3”中的其中一個(gè)了。

????在官方文檔中有這樣一個(gè)例子,在這個(gè)例子中使用never標(biāo)記不可能存在的值,在策略模式中非常好用,我們可以在異常分支返回never,如果一個(gè)非never值賦給了never對(duì)象則會(huì)產(chǎn)生異常。


TypeScript 類型基礎(chǔ)——類型收窄的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
浮山县| 徐汇区| 宣武区| 阜平县| 开封市| 定边县| 雅江县| 江山市| 忻城县| 梨树县| 新乡县| 仁化县| 独山县| 东阿县| 资兴市| 自贡市| 绍兴县| 静安区| 洛阳市| 罗源县| 东丰县| 台前县| 南部县| 额尔古纳市| 化州市| 十堰市| 长兴县| 阿城市| 涿鹿县| 新宾| 久治县| 姚安县| 通辽市| 和田县| 三台县| 哈巴河县| 炉霍县| 阳江市| 海林市| 迭部县| 大悟县|