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

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

TypeScript 高級(jí)語(yǔ)法——類(lèi)型生成

2023-08-01 09:15 作者:沒(méi)用軟件開(kāi)發(fā)日記  | 我要投稿

????TS的類(lèi)型系統(tǒng)提供了“keyof”操作符,用于從某種復(fù)雜類(lèi)型提取該類(lèi)型的鍵值。官方文檔中有這樣一個(gè)非常經(jīng)典的例子:

????此例中使用keyof操作符解析泛型占位標(biāo)志Type的類(lèi)型,這種解析發(fā)生在開(kāi)發(fā)階段的代碼編寫(xiě)過(guò)程中,因?yàn)閗eyof操作符是TS提供的語(yǔ)法無(wú)法編譯成JS代碼,在運(yùn)行時(shí)并不存在。對(duì)象x被聲明為對(duì)象,鍵分別為"a","b","c","d"、值分別為1,2,3,4,當(dāng)我們?cè)诖a中使用getProperty函數(shù)時(shí)TS會(huì)分析編寫(xiě)的參數(shù)讓確定泛型占位的真實(shí)類(lèi)型,keyof解析了x的類(lèi)型提取出了x類(lèi)型的“鍵”,所以類(lèi)型占位“KEY”在此次函數(shù)使用中被解析為 "a" | "b" | "c" | "d" ,所以在第二次使用gentProperty函數(shù)傳入字符“m”才會(huì)報(bào)錯(cuò)。

????利用type關(guān)鍵字我們可以很輕松的為keyof解析出的創(chuàng)建類(lèi)型別名:

????這段官方示例巧妙的關(guān)聯(lián)了type和keyof的關(guān)系,使用type定義類(lèi)型后使用keyof關(guān)鍵字提取類(lèi)型鍵值并定義類(lèi)型別名,這種操作方式極大的方便了對(duì)象取值校驗(yàn)。

????在Mapish的例子中TS類(lèi)型系統(tǒng)完整的表達(dá)出了JS索引取值的特性:number型的索引值會(huì)被隱式的轉(zhuǎn)換為string再通過(guò)索引訪問(wèn)對(duì)象,所以這里的M類(lèi)型應(yīng)該為string | number,但是如果我們將k的類(lèi)型聲明改為number,那么M的可能性就只剩下number了(因?yàn)樵赥S檢查中不接受string類(lèi)型的索引訪問(wèn)只能使用number類(lèi)型,所以M的類(lèi)型一定為number)。

????TS在編譯前(也就就是說(shuō)僅在編寫(xiě)代碼時(shí)生效)階段拓展了原本在JS中就存在的typeof操作符能力,typeof獲得了解析對(duì)象類(lèi)型的能力,在此例中typeof解析了f對(duì)象,獲得了函數(shù)f的TS函數(shù)類(lèi)型簽名( )=> {?x: number;?y: number; }。此官方示例中展示了TS的內(nèi)建類(lèi)型ReturnType<T>的使用,ReturnType<T>可以用來(lái)解析類(lèi)型對(duì)象的返回值,此例中配合typeof的返回值取得了類(lèi)型P的值{?x: number;?y: number;?}。

????TS為了避免開(kāi)發(fā)人員編寫(xiě)認(rèn)為正在執(zhí)行但實(shí)際上沒(méi)有執(zhí)行的代碼所以對(duì)typeof的使用做出了限制,在TS中typeof操作符只能像上例一樣使用在變量名上(函數(shù)名稱(chēng),臨時(shí)對(duì)象,class名稱(chēng))。

????在這個(gè)官方示例中TS向我們展示了其類(lèi)型系統(tǒng)的強(qiáng)大,通過(guò)對(duì)泛型占位符Type的keyof操作在編碼階段解析其真實(shí)類(lèi)型包含的對(duì)象鍵名,“Property in”語(yǔ)法代指Property表示keyof的結(jié)果。OptionsFlags泛型最終表達(dá)的是類(lèi)型Type內(nèi)的所有字段的布爾值表達(dá)。

????我們還可以增加“-”標(biāo)記用于刪除原有類(lèi)型定義的修飾符,上例中CreateMutable就使用“-readonly”刪除了LockedAccount定義時(shí)使用的readonly、Concrete刪除了類(lèi)型定義的可空修飾符。

????這只是TS類(lèi)型系統(tǒng)的淺嘗輒止,但是已經(jīng)突破大多數(shù)人的日常使用了,本章一部分代碼示例借鑒于TS官方,更多的類(lèi)型體操請(qǐng)移步官方文檔Type Manipulation章節(jié)。

TypeScript 高級(jí)語(yǔ)法——類(lèi)型生成的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
永仁县| 扶余县| 藁城市| 五大连池市| 方正县| 阿合奇县| 乃东县| 柳林县| 辽阳县| 丹棱县| 昔阳县| 宿松县| 荆州市| 济宁市| 酉阳| 闵行区| 河源市| 博罗县| 丘北县| 册亨县| 阳谷县| 大埔区| 荣成市| 庄河市| 迁安市| 周宁县| 绥化市| 涪陵区| 重庆市| 枣阳市| 中阳县| 株洲县| 龙泉市| 郎溪县| 鞍山市| 托克逊县| 阿坝| 林甸县| 阳信县| 沂源县| 镇雄县|