五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
盐城市| 鄂伦春自治旗| 正镶白旗| 新兴县| 卢龙县| 安国市| 新巴尔虎右旗| 宁陕县| 高台县| 乌鲁木齐市| 温州市| 鞍山市| 军事| 南华县| 广东省| 漳平市| 南陵县| 旅游| 东莞市| 昌乐县| 大同县| 萨迦县| 竹溪县| 正蓝旗| 正安县| 嵊州市| 娱乐| 固始县| 九江县| 玉门市| 齐河县| 寻甸| 监利县| 嘉禾县| 津南区| 花莲市| 舞阳县| 普兰县| 宿松县| 江永县| 琼结县|