日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

這個 TypeScript 技巧會讓你大吃一驚

來源: 責編: 時間:2024-05-11 09:18:06 229觀看
導讀從字符串數組中提取自定義類型在 TypeScript 的世界里,自定義類型從字符串數組中顯現,就像隱藏的寶石。TypeScript 是一個操縱現有數據和發展良好實踐的神奇工具。今天,我們將探索如何以正確的方式從字符串數組中提取全

從字符串數組中提取自定義類型

MFF28資訊網——每日最新資訊28at.com

在 TypeScript 的世界里,自定義類型從字符串數組中顯現,就像隱藏的寶石。MFF28資訊網——每日最新資訊28at.com

MFF28資訊網——每日最新資訊28at.com

TypeScript 是一個操縱現有數據和發展良好實踐的神奇工具。MFF28資訊網——每日最新資訊28at.com

今天,我們將探索如何以正確的方式從字符串數組中提取全名,以確保產生干凈的類型安全輸出。MFF28資訊網——每日最新資訊28at.com

那么,不多說了……讓我們直接開始吧。MFF28資訊網——每日最新資訊28at.com

MFF28資訊網——每日最新資訊28at.com

問題

首先讓我們通過檢查這段代碼來理解其中的問題:MFF28資訊網——每日最新資訊28at.com

const names = ["Daniel Craciun", "John Doe", "Harry Pigeon"]const findName = (surname: string) => {  return names.find((name) => name.includes(surname))}// 我們可以傳入任何字符串,這是不理想的。console.log(findName("Craciun")) // 輸出:Daniel Craciunconsole.log(findName("Doee")) // 輸出:undefined

這段代碼使用一個名字數組來進行搜索。MFF28資訊網——每日最新資訊28at.com

函數 findName 接受一個字符串 surname 并返回關聯的全名。MFF28資訊網——每日最新資訊28at.com

問題出現在當你在 findName 函數中輸入 "Doee" 時。MFF28資訊網——每日最新資訊28at.com

這個不顯眼的拼寫錯誤導致輸出了 undefined,這可能會導致后續的錯誤,因為沒有任何東西阻止我們犯這種錯誤。MFF28資訊網——每日最新資訊28at.com

這就是 TypeScript 發揮作用的地方。MFF28資訊網——每日最新資訊28at.com

如果我們確保 findName 只接受字面上的姓氏,即 Craciun、Doe、Pigeon,那么當我們輸入像 "Doee" 這樣在名字數組中不存在的輸入時,編譯器應該會提出警告。MFF28資訊網——每日最新資訊28at.com

解決方案

我們已經確定了 findName 的有效參數只能是所有現有的姓氏。MFF28資訊網——每日最新資訊28at.com

為了實現這一點,我們創建了一個名為 ExtractSurname 的泛型類型。MFF28資訊網——每日最新資訊28at.com

ExtractSurname 的代碼可能看起來有點復雜,但我們將一步步拆解它:MFF28資訊網——每日最新資訊28at.com

type ExtractSurname<T extends string> = T extends `${infer Firstname} ${infer Surname}` ? Surname : null

這里 ExtractSurname 接受一個泛型參數 T,它引用任何字面字符串,使用 extends 操作符。在 ExtractSurname<“Daniel”> 中,T 的值將等于 "Daniel"。MFF28資訊網——每日最新資訊28at.com

接下來我們應用 TypeScript 三元運算符,它類似于 JavaScript 三元運算符,但我們是在比較類型而不是實際數據。MFF28資訊網——每日最新資訊28at.com

我們知道我們的名字數組的格式是“<名> <姓>”,所以這里使用 infer 關鍵字從 T 中提取子類型。MFF28資訊網——每日最新資訊28at.com

在 ExtractSurname<“Daniel Craciun”> 中:MFF28資訊網——每日最新資訊28at.com

  • infer Firstname = “Daniel”
  • infer Surname = “Craciun”

最后,如果輸入滿足我們的“<名> <姓>”格式,返回 Surname 作為類型,否則返回 null。MFF28資訊網——每日最新資訊28at.com

好的,我們的 ExtractSurname 類型準備好了。MFF28資訊網——每日最新資訊28at.com

現在我們需要一個 Surname 類型來表示 names 中所有的姓氏。MFF28資訊網——每日最新資訊28at.com

type ExtractSurname<T extends string> = T extends `${infer Firstname} ${infer Surname}` ? Surname : nullconst names = ["Daniel Craciun", "John Doe", "Harry Pigeon"] as consttype Surname = ExtractSurname<(typeof names)[number]>

names 滿足 ExtractSurname 的格式 “*<名> <姓>*”。MFF28資訊網——每日最新資訊28at.com

我們使用 as const 將 names 的類型從字符串縮小到字面字符串數組。MFF28資訊網——每日最新資訊28at.com

這意味著我們轉換 names 的類型從 string 到:readonly [“Daniel Craciun”, “John Doe”, “Harry Pigeon”]。MFF28資訊網——每日最新資訊28at.com

參數 (typeof names)[number] 代表 names 中每個索引元素的類型:“Daniel Craciun” | “John Doe” | “Harry Pigeon”MFF28資訊網——每日最新資訊28at.com

最終,這是 Surname 的結果類型:type Surname = “Craciun” | “Doe” | “Pigeon”MFF28資訊網——每日最新資訊28at.com

最后一步是用下面的新函數 findNameUsingSurname 更新我們之前定義的 findName 函數:MFF28資訊網——每日最新資訊28at.com

// 接收一個實際的 `Surname` 而不是一般的字符串。const findNameUsingSurname = (surname: Surname) => {  // 注意:我們需要后綴運算符 "!" 來斷言 "find" 函數不返回未定義的值。  return names.find((name) => name.includes(surname))!}// 唯一可接受的輸入:"Craciun", "Doe", "Pigeon" = 最大類型安全const fullName = findNameUsingSurname("Craciun")// 輸出:"Daniel Craciun"console.log(fullName)

而這里是 TypeScript 編譯器如我們所期待的那樣施展它的魔法:MFF28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87964-0.html這個 TypeScript 技巧會讓你大吃一驚

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 拋棄自回歸,連接一致性Diffusion和LLM!UCSD上交新作熱度緊追AF 3

下一篇: Python for循環如何更加Pythonic

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲免费激情| 在线日韩电影| 欧美色图首页| 欧美三级日本三级少妇99| 国产精品草莓在线免费观看| 国产精品一区在线播放| 韩国av一区二区三区| 亚洲精品国产精品国产自| 亚洲天堂成人在线视频| 久久精品亚洲一区| 欧美精品一区二区三区视频| 国产精品资源| 亚洲国产一区二区在线| 亚洲综合三区| 女人色偷偷aa久久天堂| 国产精品视区| 亚洲经典视频在线观看| 亚洲欧美亚洲| 欧美激情第二页| 国产亚洲福利一区| 99视频在线精品国自产拍免费观看 | 国产精品嫩草久久久久| 亚洲第一福利在线观看| 亚洲一区二区视频在线观看| 久久综合亚洲社区| 欧美性猛交xxxx乱大交蜜桃| 黄网动漫久久久| 亚洲一区二区久久| 欧美成人午夜激情视频| 国产日韩精品视频一区| aa级大片欧美| 麻豆91精品| 国产欧美一区二区白浆黑人| 一本久久a久久精品亚洲| 久久精品免费观看| 国产精品乱码| 99成人精品| 美女爽到呻吟久久久久| 国产欧美日韩三级| 在线一区二区三区做爰视频网站| 久久蜜臀精品av| 国产精品一区二区久久久久| 99精品免费视频| 欧美成人资源网| 黑人中文字幕一区二区三区| 亚洲欧美日本国产有色| 欧美美女视频| 亚洲黄色在线看| 久久男人资源视频| 国产欧美在线视频| 亚洲一区免费看| 欧美日韩黄色一区二区| 亚洲国产精品成人va在线观看| 久久成人18免费观看| 国产精品日韩在线播放| 亚洲午夜极品| 欧美日韩一区二区三区免费看| 亚洲国产成人在线视频| 久久免费视频网站| 国产精品视频999| 亚洲午夜av电影| 欧美三级乱码| 一区二区高清| 欧美精品www在线观看| 亚洲高清在线观看| 麻豆精品传媒视频| 在线国产日韩| 鲁鲁狠狠狠7777一区二区| 黄色av一区| 久久亚洲不卡| 在线看无码的免费网站| 激情五月婷婷综合| 欧美一区2区三区4区公司二百| 国产精品久久久久久久久久免费看| 在线天堂一区av电影| 欧美日韩一区二区在线| 一区二区三区日韩欧美| 国产精品成人观看视频免费| 国产精品99久久久久久人| 欧美午夜片欧美片在线观看| 亚洲视频在线观看免费| 欧美性猛片xxxx免费看久爱| 亚洲深夜激情| 国产精品久久久久9999吃药| 夜夜爽夜夜爽精品视频| 欧美日韩亚洲一区三区| 亚洲视频一起| 国产精品无码专区在线观看| 午夜久久福利| 国产日韩欧美在线看| 久久精品视频在线观看| 黄色成人免费网站| 免费视频久久| 99香蕉国产精品偷在线观看| 欧美日韩一视频区二区| 亚洲自拍16p| 国产一区二区| 六十路精品视频| 亚洲精品视频在线播放| 欧美日韩一区二区免费在线观看| 亚洲天堂成人| 国产女主播视频一区二区| 久久精品在线播放| 亚洲国产成人精品女人久久久| 欧美成人一区二区三区| 一区二区三区四区国产精品| 国产精品乱人伦一区二区| 欧美一区二区三区四区在线观看| 黑人操亚洲美女惩罚| 欧美福利视频在线观看| 在线一区二区三区四区五区| 国产精品尤物| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲伦理在线| 国产精品一区免费视频| 久久久五月婷婷| 日韩亚洲欧美成人一区| 国产精品一区毛片| 久久中文字幕一区| 亚洲美洲欧洲综合国产一区| 国产精品久久影院| 久久综合成人精品亚洲另类欧美| 亚洲精品在线看| 国产欧美日韩视频一区二区三区| 开心色5月久久精品| 一本久久综合亚洲鲁鲁五月天| 国产欧美日韩一级| 欧美freesex交免费视频| 亚洲一区二区三区午夜| 在线成人黄色| 欧美手机在线| 久久综合五月天婷婷伊人| 一区二区欧美在线| 黑人一区二区| 国产精品国产三级国产aⅴ入口| 久久精品国产久精国产思思| 亚洲乱码国产乱码精品精可以看| 国产嫩草一区二区三区在线观看 | 国产亚洲午夜高清国产拍精品| 欧美高清在线精品一区| 午夜视频在线观看一区二区三区| 亚洲国产成人不卡| 国产精品日韩高清| 欧美国产精品日韩| 欧美一区二区性| 亚洲乱码国产乱码精品精| 国产人成精品一区二区三| 欧美精品免费在线| 欧美中文字幕精品| 中文一区在线| 亚洲成色999久久网站| 国产精品久久久久久久久久免费 | 亚洲欧洲精品成人久久奇米网 | 在线观看亚洲| 国产精品一区二区久久久久| 欧美国产日韩免费| 久久精品99久久香蕉国产色戒 | 欧美激情导航| 久久久久成人精品| 亚洲欧美日韩视频一区| 日韩视频在线一区二区三区| 国产一区成人| 国产精品人成在线观看免费| 欧美日韩精品国产| 免费亚洲一区二区| 久久精品免视看| 亚洲自拍偷拍色片视频| 99re6热在线精品视频播放速度| 精品动漫3d一区二区三区免费版 | 一区二区三区欧美日韩| 亚洲日本精品国产第一区| 韩国成人理伦片免费播放| 国产精品一区二区在线观看| 欧美四级伦理在线| 欧美精品一区二区三区视频| 美女视频黄a大片欧美| 久久久久国产一区二区三区| 香蕉免费一区二区三区在线观看 | 在线性视频日韩欧美| 亚洲精品一级| 91久久精品国产91久久性色tv| 有码中文亚洲精品| 好吊色欧美一区二区三区四区| 国产精品一区毛片| 国产精品另类一区| 国产精品久久久久av| 欧美三级在线视频| 欧美连裤袜在线视频| 欧美福利一区二区三区| 欧美aaa级| 欧美77777| 欧美+亚洲+精品+三区| 美女福利精品视频| 毛片基地黄久久久久久天堂| 卡一卡二国产精品| 免费国产一区二区| 免费成人黄色片| 蜜臀av一级做a爰片久久| 久热综合在线亚洲精品| 另类春色校园亚洲| 欧美xx视频| 欧美久久一区| 欧美日韩一区综合| 国产精品免费福利|