我相信 ' strVariable as number' 將strVariable轉換為數字型別。
但是經過幾個小時的掙扎,我發現它的型別沒有改變。
Number( strVariable ) 是關鍵。
'as number' 和 'Number()' 有什么區別?
如果“作為數字”實際上并未將型別轉換為數字,那么為什么會洗掉 IDE 的型別錯誤?
const strVariable: string = '';
const numVariable: number = 0;
numVariable = strVariable as unknown as number; // I thought it is converting to number but it wasn't
typeof (strVariable as unknown as number); // string. but type error is gone. How?
typeof (Number(strVariable)) // it do converts to number.
uj5u.com熱心網友回復:
好的,為了理解我們首先需要澄清 TypeScript 給我們的型別系統在運行時不存在。你可以把它看成你在變數上有 2 個完全不同的型別層,一個是你期望的型別 - 某種虛擬型別(TypeScript 型別),另一個是它實際所在的型別運行時(JavaScript 型別)。
該typeof關鍵字為您提供了一個變數的運行時型別,而as關鍵字改變打字稿型別的變數。
明白了這一點,我們可以看看你的具體情況。您正在使用as屬于 TypeScript的關鍵字并執行“虛擬”轉換。使用它時,您告訴打字稿編譯器您希望變數是一個數字,即使它實際上可能不是一個數字。使用typeof關鍵字時,您將獲得變數的運行時型別,并且因為您只使用了as關鍵字而沒有真正轉換它,所以它保持不變。
在另一示例中,在這里所使用的Number()功能,則實際轉換在JavaScript運行變數,這意味著改變到是一個數,其可變裝置的實際型別,當你使用檢查型別typeof關鍵字,你會得到number作為變數的型別。
希望這已經足夠清楚了,如果不是的話,這篇關于 TypeScript 中型別轉換的文章將有助于澄清事情:https : //dev.to/ylerjen/typescript-cast-is-a-type-breaker-1jbh
uj5u.com熱心網友回復:
as關鍵字只是“告訴編譯器這是一個數字”。它不會轉換任何東西,值必須是一個alredy 數字,否則你會招致例外行為。
Number() 是一個具有精確行為的函式,可以將相同型別的值轉換為數字。
埃:
const n: any = 5;
const s: string = "5";
const a = n as number // <- ok... the type of a was "any", but the content is alredy a number.
const b = s as number // <- error
const c = Number(n) // <- ok!
const d = Number(s) // <- ok, Number() can convert a string onto a number
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/367827.html
上一篇:異步/等待-操作順序不起作用
下一篇:如何在頁面呈現之前填充我的常量?
