AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

As Const:一個被低估的 TypeScript 特性

來源: 責編: 時間:2023-11-09 09:14:29 280觀看
導讀你有沒有感覺 TypeScript中可能有一些被低估但卻非常有用的工具,你并沒有充分利用?的確有,今天我們要重點介紹一個:as const。它雖然沉默卻強大,而且非常有力,是一個被低估的功能,但它的力量卻強大無比。理解 'as const'以下

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

你有沒有感覺 TypeScript中可能有一些被低估但卻非常有用的工具,你并沒有充分利用?的確有,今天我們要重點介紹一個:as const。它雖然沉默卻強大,而且非常有力,是一個被低估的功能,但它的力量卻強大無比。Unr28資訊網——每日最新資訊28at.com

理解 'as const'

以下是一個沒有 as const 的代碼片段:Unr28資訊網——每日最新資訊28at.com

const menu = {    home: '/home',    about: '/about',    contact: '/contact'};

這個TypeScript的世界里,這個變量可以隨心所欲地變化和改變。聽起來很靈活,,但是這里有個陷阱。Unr28資訊網——每日最新資訊28at.com

請考慮這個 go to root 方法:Unr28資訊網——每日最新資訊28at.com

function goTo(route: 'home' | 'about' | 'contact') {    // some implementation}

注意到了嗎?如果你在 menu 對象中添加了另一條路由,你也需要更新函數 goTo 。這就是冗余,導致同一類型有多個真實來源。Unr28資訊網——每日最新資訊28at.com

as const 可以為我們解決這個問題。Unr28資訊網——每日最新資訊28at.com

TypeScript的期望與現實

當你在使用TypeScript時,有時你所期待的和實際發生的情況會痛苦地產生巨大的分歧。當我們試圖從現有的類型中創建一個新的類型時,這種分歧變得非常明顯。Unr28資訊網——每日最新資訊28at.com

這里有個例子。假設你有一個對象,你期望TypeScript只考慮這個對象的屬性。但是,意外的是!TypeScript只把它當作一個字符串來考慮。Unr28資訊網——每日最新資訊28at.com

let route: keyof typeof menu;route = 'store'; // No error

在這種情況下,TypeScript認為 route 是一個可能會發生變化的字符串。但是,我們希望基于屬性的固定類型。我們的期望和現實并未對齊。Unr28資訊網——每日最新資訊28at.com

解決方案:'as const'

我們剛剛經歷的那種痛苦的分歧,就是 as const 試圖解決的問題。通過將易變屬性改為不變屬性, as const 使我們的期望與現實保持一致。Unr28資訊網——每日最新資訊28at.com

const menu = {   home: '/home',   about: '/about',   contact: '/contact' } as const;

通過這個簡單的改變,我們的對象屬性變成了只讀。我們看看它如何影響我們之前的問題:Unr28資訊網——每日最新資訊28at.com

let route: keyof typeof menu; route = 'store'; // Error. Exactly what we wanted!

通過使用 as const 使對象變為不可變,TypeScript 現在明白 route 應該只允許提供的鍵。現在,我們得到了我們想要的確切結果:當我們試圖設置無效值時,會出現類型錯誤。Unr28資訊網——每日最新資訊28at.com

與 object.freeze 的比較

你可能對JavaScript方法 Object.freeze() 有所了解。 Object.freeze() 和 as const 都可以使對象只讀,但它們之間存在著關鍵的差異。Unr28資訊網——每日最新資訊28at.com

我們快速了解一下他們的能力:Unr28資訊網——每日最新資訊28at.com

const menuFrozen = Object.freeze({    home: '/home',    about: '/about',    contact: '/contact'});const menuConst = {    home: '/home',    about: '/about',    contact: '/contact'} as const;

以及一些結果:Unr28資訊網——每日最新資訊28at.com

// 這不會改變任何東西,home 仍然是'/home'menuFrozen.home = '/newHome';// 編譯時錯誤menuConst.home = '/newHome';

通過 Object.freeze() ,我們擁有了一個運行時概念,可以防止JavaScript對象的更改。然而, Object.freeze() 并不影響 TypeScript 的類型推斷。Unr28資訊網——每日最新資訊28at.com

另一方面,有了 as const ,TypeScript在編譯時將對象視為不可變的,使你的類型檢查更為嚴格,這有助于捕捉更多可能的錯誤。Unr28資訊網——每日最新資訊28at.com

因此,雖然 as const 和 Object.freeze() 在表面上看起來可能相似,但它們服務于不同的目的。 as const 在類型檢查上更為強大,而 Object.freeze() 只在運行時強制實施不變性。Unr28資訊網——每日最新資訊28at.com

一個配合 'as const' 的更清潔的 'go to root' 函數

我們使用 as const 重構 goTo 函數:Unr28資訊網——每日最新資訊28at.com

function goTo(route: keyof typeof menu) {      // some implementation}

就這樣,as const 使我們免于重復信息的愚蠢操作。我們可以從我們創建的對象中推斷出一個類型。這樣是不是更簡潔了?Unr28資訊網——每日最新資訊28at.com

使用 'as const' 提取對象值

我們使用 as const 提取我對象值,顛覆TypeScript的規則,獲取我們需要的所有詳細信息,以編寫強大且無bug的代碼。這只需要一點類型魔法。Unr28資訊網——每日最新資訊28at.com

以下是一個示例:Unr28資訊網——每日最新資訊28at.com

type Routes = typeof menu[keyof typeof menu]; // Routes is now equal to '/home' | '/about' | '/contact'

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

本文鏈接:http://www.tebozhan.com/showinfo-26-17890-0.htmlAs Const:一個被低估的 TypeScript 特性

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

上一篇: SpringCloud OpenFeign整合Ribbon實現負載均衡及源碼分析

下一篇: Python中的雙下劃線:特殊方法和屬性的魔法世界!

標簽:
  • 熱門焦點
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 自動化在DevOps中的力量:簡化軟件開發和交付

    自動化在DevOps中扮演著重要角色,它提升了DevOps的效能。通過自動化工具和方法,DevOps團隊可以實現以下目標:消除手動和重復性任務。簡化流程。在整個軟件開發生命周期中實現更
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人“珍藏”是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網聯合創
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
Top