TypeScript — Type Inference & Annotation(1)

SunBu
UNNO Technology
Published in
3 min readMay 24, 2020

型別推論、型別註記

重點 1. 型別推論的目的 Purpose of Type Inference

讓 TypeScript 協助我們確保不會做錯事情 — — 也就是不小心把不同型別的東西丟到被推論過後的變數

重點 2. any 是造成型別混亂的根源

Nullable Types 會被推論為 any 型別,而 any 在 TypeScript 裡會無法監督變數狀態,造成程式碼的混亂。

因此我們應當儘量避免這件事情的發生:變數的型別被視為 any

重點 3. 遲滯性指派 Delayed Initialization

每當我們對任何變數不立即指派值,該變數會無條件被視為 any 型別。

重點 4. 對遲滯性指派進行型別註記

let A: T;A = B as T;

若使用者宣告變數 A,其中沒有對 A指派值但明確給它型別註記 T,而後再把型別也是 TB 變數代入 A 的話:

  1. 就算 A 是非 any 型別但一開始是 undefined 的狀態,TS 仍然不會對你有什麼太大意見
  2. 真正有意見時,是在你指派具 T 型別的值(也就是 B)到 A 裡面前,你就對 A 做其他行為,TS 會自動跟你槓上(TDZ 的概念)
  3. 基本上,對 A 有註記跟沒註記 T 型別差別僅僅只是防止變數 A 被 TS 冷落(也就是被推論為 any),但也因為這樣我們才能找回 TS 對 A 變數的關注,防止我們不小心弄錯 A 的型別

重點 5. 型別註記的目的

  1. 其中註記最大的好處,除了是讓開發者明確知道變數固定在哪個型別外,TS 也可以不用猜就知道要怎麼幫我們關注該變數
  2. any 這個禍根給剔除

重點 6. 型別註記與推論 Type Annotation & Inference

  1. TS 基本上會把型別推論做得很好,你也不太需要擔心說:“如果我忘記註記那裡我會不會得不到 TS 的關切?”,這問題對 TS 來講小事一樁,它可是很聰明的!
  2. 但是如果對於型別不明確或者是會被推論為 any 狀態的變數,你可就要積極使用型別註記囉,不然 TS 可不幫你處理這部分的事情
  3. 型別推論是 TS 自你開始寫程式碼的時候,它就會幫你監控了;然而,型別註記則是開發者必須手動宣告給 TS 看的

來源:

--

--

SunBu
UNNO Technology

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