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

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

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

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

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

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

理解 'as const'

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

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

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

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

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

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

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

TypeScript的期望與現實

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

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

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

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

解決方案:'as const'

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

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

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

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

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

與 object.freeze 的比較

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

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

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

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

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

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

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

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

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

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

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

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

使用 'as const' 提取對象值

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein“利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 井陉县| 施甸县| 陕西省| 东莞市| 罗甸县| 延边| 嫩江县| 濉溪县| 乾安县| 嵊州市| 临海市| 京山县| 简阳市| 高安市| 达尔| 越西县| 扎赉特旗| 青岛市| 彭山县| 阜城县| 灵山县| 和顺县| 绥化市| 汪清县| 郓城县| 宁德市| 云梦县| 镇平县| 苍山县| 琼结县| 山东| 剑河县| 资源县| 醴陵市| 东平县| 垦利县| 青铜峡市| 永平县| 聊城市| 娱乐| 漯河市|