TypeScript類型斷言: as number
為何無效?
本文探討TypeScript中類型轉換的常見誤區,特別是as
關鍵字的局限性。
場景重現
考慮如下代碼:
const props = defineProps() getDictGroup(props.group) export const getDictGroup = async (sid: number) => { const dict = await getDict() console.info(typeof sid); // 輸出可能為"string" sid = sid as number; console.info(typeof sid); // 輸出仍然可能為"string" console.info(typeof (sid as number)); // 輸出仍然可能為"string" }
即使sid
聲明為number
類型,且使用了as number
類型斷言, typeof sid
仍然可能返回"string"
。這並非as
關鍵字失效,而是其作用機制導致的。
as
關鍵字的本質
as
關鍵字是TypeScript的類型斷言,它只在編譯時起作用,告訴編譯器“相信我,我知道我在做什麼,這個值是這個類型”。它不會在運行時進行實際的類型轉換。
因此,如果props.group
在運行時實際值為字符串,即使進行了as number
斷言,其運行時類型仍然是字符串。 typeof
操作符在運行時檢查類型,所以結果仍然是"string"
。 parseInt(sid)
編譯報錯是因為TypeScript 在編譯階段根據類型推斷,認為sid
是number 類型,而parseInt
期望的是string 類型,兩者不匹配。
正確的類型轉換方法
要進行真正的運行時類型轉換,需使用JavaScript內置的類型轉換函數:
-
字符串轉數字:
Number(sid)
,parseInt(sid, 10)
(十進制) -
數字轉字符串:
String(sid)
修正後的代碼:
export const getDictGroup = async (sid: string | number) => { // 修改參數類型const dict = await getDict() let numSid: number; if (typeof sid === 'string') { numSid = parseInt(sid, 10); // 安全轉換,處理潛在錯誤if (isNaN(numSid)) { console.error("Invalid input: sid is not a valid number"); return; // 或拋出錯誤} } else { numSid = sid; } console.info(typeof numSid); // 輸出"number" // ...後續代碼使用numSid }
此版本首先檢查sid
的類型,然後進行相應的轉換,並處理潛在的錯誤,例如字符串無法轉換為數字的情況。
總結
as
關鍵字是類型斷言,僅用於編譯時類型檢查,不會改變運行時類型。 真正的類型轉換需要使用JavaScript的類型轉換函數,並註意處理潛在的運行時錯誤。 修改參數類型為string | number
允許函數接受字符串或數字作為輸入,並進行相應的處理。 記住在進行類型轉換時添加錯誤處理機制,以確保代碼的健壯性。
以上是在TypeScript中,為什麼使用as number後變量類型仍然是string?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML的作用是通過標籤和屬性定義網頁的結構和內容。 1.HTML通過到、等標籤組織內容,使其易於閱讀和理解。 2.使用語義化標籤如、等增強可訪問性和SEO。 3.優化HTML代碼可以提高網頁加載速度和用戶體驗。

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代碼” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代碼”代碼“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract

HTML、CSS和JavaScript是Web開發的三大支柱。 1.HTML定義網頁結構,使用標籤如、等。 2.CSS控製網頁樣式,使用選擇器和屬性如color、font-size等。 3.JavaScript實現動態效果和交互,通過事件監聽和DOM操作。

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

HTML適合初學者學習,因為它簡單易學且能快速看到成果。 1)HTML的學習曲線平緩,易於上手。 2)只需掌握基本標籤即可開始創建網頁。 3)靈活性高,可與CSS和JavaScript結合使用。 4)豐富的學習資源和現代工具支持學習過程。

AnexampleOfAstartingTaginHtmlis,beginSaparagraph.startingTagSareEssentialInhtmlastheyInitiateEllements,defiteTheeTheErtypes,andarecrucialforsstructuringwebpages wepages webpages andConstructingthedom。

如何設計菜單中的虛線分割效果?在設計菜單時,菜名和價格的左右對齊通常不難實現,但中間的虛線或點如何...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。