TypeScript — Assertion

SunBu
UNNO Technology
Published in
2 min readJun 8, 2020

型別斷言

型別斷言語法

斷言(Assertion)使用的關鍵字是 as 或者 <T>(...) 。通常斷言的使用情境是—程式沒辦法推論(Inference)某表達式(Expression)的確切運算結果之型別,才會使用斷言來做處理這種情況。

至於是什麼情況是程式無法推論的呢? — 使用第三方的資源(Third-party resources),譬如說 JSON API 獲得的內容型別格式、讀取檔案轉成 JSON 物件的結果、使用套件提供的功能、呼叫會回傳未知結果的函示等。

斷言語法只能在表達式上,來斷言表達式所運算的結果之型別

註記 Annotation V.S. 斷言 Assertion

註記(Annotation)旨在告訴編譯器:「任何被註記到的變數、函式型別(參數、回傳值)等,都必須遵照被註記過後的變數型別」 — 關鍵字「遵照」

斷言(Assertion)無視編譯器靜態分析整個程式碼的推論過程,果斷地告訴編譯器說:「被斷言過後的表達式之運算結果就是某某型別」—關鍵字意象是「覆蓋」該表達式的推論結果。

使用斷言要小心,千萬不要發生以下事情:

程式以後認定變數 something 為字串型別,但變數 something 實際存的是數字,以上程式碼 TypeScript 是不會出現任何錯誤訊息。

這個事情會常發生在 JSON.parse,它回傳的結果就是 any 型別,因為該方法無法保證使用者的輸入長什麼樣子,因此只能將輸出定為 any 型別

因此斷言要先確定會遇到什麼樣的 JSON 物件,在做相對應得斷言,就不會造成人為的 Bug 了。

資料來源:

--

--

SunBu
UNNO Technology

熱愛學習新技術和分享的年輕人,目前常用技術是 Vue、React