国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 TypeScript 實(shí)用程序類型:完整指南

TypeScript 實(shí)用程序類型:完整指南

Dec 08, 2024 am 03:41 AM

TL;DR: TypeScript 實(shí)用程序類型是預(yù)先構(gòu)建的函數(shù),可以轉(zhuǎn)換現(xiàn)有類型,使您的代碼更干凈且更易于維護(hù)。本文通過實(shí)際示例解釋了基本實(shí)用程序類型,包括如何更新用戶配置文件、管理配置和安全地過濾數(shù)據(jù)。

TypeScript Utility Types: A Complete Guide

TypeScript 是現(xiàn)代 Web 開發(fā)的基石,使開發(fā)人員能夠編寫更安全、更易于維護(hù)的代碼。通過向 JavaScript 引入靜態(tài)類型,TypeScript 有助于在編譯時(shí)捕獲錯(cuò)誤。根據(jù) 2024 年 Stack Overflow 開發(fā)者調(diào)查,TypeScript 在開發(fā)者中最流行的腳本技術(shù)中排名第 5

TypeScript 令人驚嘆的功能是其成功的主要原因。例如,實(shí)用程序類型可以幫助開發(fā)人員簡(jiǎn)化類型操作并減少樣板代碼。 TypeScript 2.1 中引入了實(shí)用程序類型,并且每個(gè)新版本中都添加了其他實(shí)用程序類型。

本文將詳細(xì)討論實(shí)用程序類型,以幫助您掌握 TypeScript。

了解 TypeScript 實(shí)用程序類型

實(shí)用程序類型是 TypeScript 中預(yù)定義的泛型類型,可以將現(xiàn)有類型轉(zhuǎn)換為新的變體類型。它們可以被認(rèn)為是類型級(jí)函數(shù),將現(xiàn)有類型作為參數(shù)并根據(jù)某些轉(zhuǎn)換規(guī)則返回新類型。

這在使用接口時(shí)特別有用,因?yàn)橥ǔP枰薷囊汛嬖陬愋偷淖凅w,而實(shí)際上不需要復(fù)制類型定義。

核心實(shí)用程序類型及其實(shí)際應(yīng)用

TypeScript Utility Types: A Complete Guide

部分的

Partial 實(shí)用程序類型采用一個(gè)類型并使其所有屬性都是可選的。當(dāng)類型嵌套時(shí),此實(shí)用程序類型特別有價(jià)值,因?yàn)樗箤傩赃f歸地可選。

例如,假設(shè)您正在創(chuàng)建一個(gè)用戶配置文件更新功能。在這種情況下,如果用戶不想更新所有字段,則可以只使用 Partial 類型,只更新所需的字段。這在不需要所有字段的表單和 API 中非常方便。

請(qǐng)參考以下代碼示例。

必需的

Required 實(shí)用程序類型構(gòu)造一個(gè)類型,并將所提供類型的所有屬性設(shè)置為 required。這對(duì)于確保在將對(duì)象保存到數(shù)據(jù)庫之前所有屬性都可用非常有用。

例如,如果在汽車注冊(cè)時(shí)使用必填,它將確保您在創(chuàng)建或保存新汽車記錄時(shí)不會(huì)錯(cuò)過任何必要的屬性,例如品牌、型號(hào)和里程。這對(duì)于數(shù)據(jù)完整性而言非常關(guān)鍵。

請(qǐng)參考以下代碼示例。

只讀

Readonly 實(shí)用程序類型創(chuàng)建一個(gè)所有屬性都是只讀的類型。這在配置管理中非常有用,可以保護(hù)關(guān)鍵設(shè)置免受不必要的更改。

例如,當(dāng)您的應(yīng)用程序依賴于特定的 API 端點(diǎn)時(shí),它們不應(yīng)在執(zhí)行過程中發(fā)生更改。將它們?cè)O(shè)置為只讀可以保證它們?cè)趹?yīng)用程序的整個(gè)生命周期中保持不變。

請(qǐng)參考以下代碼示例。

挑選

Pick** 實(shí)用程序類型通過從現(xiàn)有類型中選取一組屬性來構(gòu)造類型。當(dāng)您需要過濾掉重要信息(例如用戶姓名和電子郵件)以顯示在儀表板或摘要視圖中時(shí),這非常有用。它有助于提高數(shù)據(jù)的安全性和清晰度。

請(qǐng)參考以下代碼示例。

忽略

Omit 實(shí)用程序類型通過從現(xiàn)有類型中排除特定屬性來構(gòu)造類型。

例如,如果您想與某些第三方共享用戶數(shù)據(jù)但沒有敏感信息(例如電子郵件地址),省略將很有用。您可以通過定義一個(gè)排除這些字段的新類型來做到這一點(diǎn)。特別是在 API 中,您可能想查看 API 響應(yīng)中的外部?jī)?nèi)容。

請(qǐng)參閱下一個(gè)代碼示例。

記錄

Record 實(shí)用程序類型創(chuàng)建具有指定鍵和值的對(duì)象類型,這在處理結(jié)構(gòu)化映射時(shí)非常有用。

例如,在庫存管理系統(tǒng)的上下文中,Record 類型可用于在項(xiàng)目和數(shù)量之間進(jìn)行顯式映射。通過這種類型的結(jié)構(gòu),可以輕松訪問和修改庫存數(shù)據(jù),同時(shí)確保所有預(yù)期的水果都得到考慮。

排除

排除**實(shí)用程序類型通過從聯(lián)合中排除特定類型來構(gòu)造類型。

在設(shè)計(jì)只接受某些原始類型(例如,數(shù)字或布爾值,但不接受字符串)的函數(shù)時(shí),可以使用 排除。這可以防止意外類型可能在執(zhí)行過程中導(dǎo)致錯(cuò)誤的錯(cuò)誤。

請(qǐng)參考以下代碼示例。

提煉

Extract 實(shí)用程序類型通過從聯(lián)合中提取特定類型來構(gòu)造類型。

在只需要處理混合類型集合中的數(shù)值(例如執(zhí)行計(jì)算)的情況下,使用 Extract 可確保僅傳遞數(shù)字。這在數(shù)據(jù)處理管道中非常有用,其中嚴(yán)格的類型可以防止運(yùn)行時(shí)錯(cuò)誤。

請(qǐng)參考以下代碼示例。

不可為空

NonNullable 實(shí)用程序類型通過從給定類型中排除 nullundefined 來構(gòu)造類型。

在需要始終定義某些值(例如用戶名或產(chǎn)品 ID)的應(yīng)用中,將它們?cè)O(shè)置為 NonNullable 將確保此類關(guān)鍵字段永遠(yuǎn)不會(huì)為 null未定義。它在表單驗(yàn)證和 API 響應(yīng)期間非常有用,因?yàn)槿鄙僦悼赡軙?huì)導(dǎo)致問題。

請(qǐng)參閱下一個(gè)代碼示例。

返回類型

ReturnType 實(shí)用程序提取函數(shù)的返回類型。

當(dāng)使用返回復(fù)雜對(duì)象(例如坐標(biāo))的高階函數(shù)或回調(diào)時(shí),使用 ReturnType 可以簡(jiǎn)化定義預(yù)期的返回類型,而無需每次都手動(dòng)聲明它們。這可以通過減少與類型不匹配相關(guān)的錯(cuò)誤來加快開發(fā)速度。

參數(shù)

參數(shù)實(shí)用程序?qū)⒑瘮?shù)的參數(shù)類型提取為元組。

在想要?jiǎng)討B(tài)操作或驗(yàn)證函數(shù)參數(shù)的情況下,例如在函數(shù)周圍編寫包裝器時(shí),這可以輕松提取和重用參數(shù)類型。通過確保函數(shù)簽名的一致性,它極大地提高了代碼庫中代碼的可重用性和可維護(hù)性。

請(qǐng)參考以下代碼示例。

具有實(shí)用程序類型組合的高級(jí)用例

使用 TypeScript 開發(fā)應(yīng)用程序時(shí),組合這些實(shí)用程序類型可以獲得強(qiáng)大的結(jié)果。讓我們看一下多種實(shí)用程序類型有效協(xié)同工作的一些場(chǎng)景。

結(jié)合部分和必需

您可以創(chuàng)建一個(gè)需要某些字段而允許其他字段可選的類型。

在此示例中,UpdateUser 需要 id 屬性,同時(shí)允許名稱和電子郵件為可選。此模式對(duì)于更新標(biāo)識(shí)符必須始終存在的記錄非常有用。

創(chuàng)建靈活的 API 響應(yīng)

您可能想要定義根據(jù)特定條件具有不同形狀的 API 響應(yīng)。

這里,ApiResponse 允許您為 API 調(diào)用創(chuàng)建靈活的響應(yīng)類型。通過使用 Pick ,您可以確保響應(yīng)中僅包含相關(guān)的用戶數(shù)據(jù)。

結(jié)合排除和提取來過濾類型

您可能會(huì)遇到需要根據(jù)特定條件從聯(lián)合中過濾掉特定類型的情況。

請(qǐng)參考以下代碼示例。

這里,Exclude 實(shí)用程序用于創(chuàng)建一個(gè)類型 ( NonLoadingResponses ),從原始 ResponseTypes 聯(lián)合中排除 loading,允許 handleResponse 函數(shù)僅接受成功錯(cuò)誤作為有效輸入。

最佳實(shí)踐

僅使用必要的

雖然實(shí)用程序類型非常強(qiáng)大,但過度使用它們可能會(huì)導(dǎo)致復(fù)雜且不可讀的代碼。在利用這些實(shí)用程序和保持代碼清晰度之間取得平衡至關(guān)重要。

請(qǐng)參閱下一個(gè)代碼示例。

保持清晰度

確保每個(gè)實(shí)用程序用例的目的明確。避免將太多實(shí)用程序嵌套在一起,因?yàn)樗赡軙?huì)混淆類型的預(yù)期結(jié)構(gòu)。

請(qǐng)參考以下代碼示例。

性能考慮

雖然在運(yùn)行時(shí)性能影響很少,因?yàn)?TypeScript 類型在編譯后消失,但復(fù)雜類型會(huì)減慢 TypeScript 編譯器的速度,影響開發(fā)速度。

結(jié)論

毫無疑問,TypeScript 是 Web 開發(fā)人員中最流行的語言之一。實(shí)用程序類型是 TypeScript 中的獨(dú)特功能之一,如果正確使用,它可以顯著提高 TypeScript 開發(fā)體驗(yàn)和代碼質(zhì)量。但是,我們不應(yīng)該在所有場(chǎng)景中都使用它們,因?yàn)榭赡軙?huì)出現(xiàn)性能和代碼可維護(hù)性問題。

相關(guān)博客

  • JavaScript 和 TypeScript 的頂級(jí) Linters:簡(jiǎn)化代碼質(zhì)量管理
  • 每個(gè)開發(fā)人員都應(yīng)該知道的 7 個(gè) JavaScript 單元測(cè)試框架
  • TypeScript 中感嘆號(hào)的使用
  • 理解 TypeScript 中的條件類型

以上是TypeScript 實(shí)用程序類型:完整指南的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

如何減少JavaScript應(yīng)用程序的有效載荷大?。? />
								</a>
								<a href=如何減少JavaScript應(yīng)用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫支持該特性;3.壓縮和合并資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合并文件并優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫如day.js、fetch

如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫,語法簡(jiǎn)潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡(jiǎn)化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡(jiǎn)單

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在于加載方式和使用場(chǎng)景。1.CommonJS是同步加載,適用于Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用于瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語法上,ES模塊使用import/export,且必須位于頂層作用域,而CommonJS使用require/module.exports,可在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用;4.CommonJS廣泛用于舊版Node.js及依賴它的庫如Express,ES模塊則適用于現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問題

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對(duì)象出發(fā)遍歷并標(biāo)記活躍對(duì)象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對(duì)象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽器;②閉包中對(duì)外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對(duì)象關(guān)聯(lián),以提升性能與穩(wěn)定性。

var vs Let vs const:快速JS綜述解釋器 var vs Let vs const:快速JS綜述解釋器 Jul 02, 2025 am 01:18 AM

var、let和const的區(qū)別在于作用域、提升和重復(fù)聲明。1.var是函數(shù)作用域,存在變量提升,允許重復(fù)聲明;2.let是塊級(jí)作用域,存在暫時(shí)性死區(qū),不允許重復(fù)聲明;3.const也是塊級(jí)作用域,必須立即賦值,不可重新賦值,但可修改引用類型的內(nèi)部值。優(yōu)先使用const,需改變變量時(shí)用let,避免使用var。

See all articles