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

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

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

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

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

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

理解 'as const'

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

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

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

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

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

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

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

TypeScript的期望與現實

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

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

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

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

解決方案:'as const'

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

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

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

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

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

與 object.freeze 的比較

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

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

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

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

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

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

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

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

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

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

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

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

使用 'as const' 提取對象值

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 電視息屏休眠仍有網絡上傳 愛奇藝被質疑“薅消費者羊毛”

    記者丨寧曉敏 見習生丨汗青出品丨鰲頭財經(theSankei) 前不久,愛奇藝發布了一份亮眼的一季報,不僅營收和會員營收創造歷史最佳表現,其運營利潤也連續6個月實現增長。自去年年初
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁“充值中心”入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 簽約井川里予、何丹彤,單視頻點贊近千萬,MCN黑馬永恒文希快速崛起!

    來源:視聽觀察永恒文希傳媒作為一家MCN公司,說起它的名字來,可能大家會覺得有點兒陌生,但是說出來下面一串的名字之后,或許大家就會感到震驚,原來這么多網紅,都簽約這家公司了。根
Top 主站蜘蛛池模板: 讷河市| 阜新市| 封丘县| 汉川市| 柞水县| 玉山县| 阿荣旗| 麦盖提县| 饶河县| 韶关市| 上高县| 张掖市| 依兰县| 曲阳县| 湛江市| 陆良县| 德化县| 京山县| 五华县| 三明市| 汝城县| 资兴市| 汕头市| 汕尾市| 西青区| 藁城市| 开江县| 南华县| 六枝特区| 桂阳县| 舟山市| 阜城县| 屯门区| 会理县| 加查县| 论坛| 庄浪县| 永平县| 策勒县| 灌南县| 天水市|