TypeScript — Type Inference & Annotation(1)
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
,而後再把型別也是 T
的 B
變數代入 A
的話:
- 就算
A
是非any
型別但一開始是undefined
的狀態,TS 仍然不會對你有什麼太大意見 - 真正有意見時,是在你指派具
T
型別的值(也就是B
)到A
裡面前,你就對A
做其他行為,TS 會自動跟你槓上(TDZ 的概念) - 基本上,對
A
有註記跟沒註記T
型別差別僅僅只是防止變數A
被 TS 冷落(也就是被推論為any
),但也因為這樣我們才能找回 TS 對A
變數的關注,防止我們不小心弄錯A
的型別
重點 5. 型別註記的目的
- 其中註記最大的好處,除了是讓開發者明確知道變數固定在哪個型別外,TS 也可以不用猜就知道要怎麼幫我們關注該變數
- 把
any
這個禍根給剔除
重點 6. 型別註記與推論 Type Annotation & Inference
- TS 基本上會把型別推論做得很好,你也不太需要擔心說:“如果我忘記註記那裡我會不會得不到 TS 的關切?”,這問題對 TS 來講小事一樁,它可是很聰明的!
- 但是如果對於型別不明確或者是會被推論為
any
狀態的變數,你可就要積極使用型別註記囉,不然 TS 可不幫你處理這部分的事情 - 型別推論是 TS 自你開始寫程式碼的時候,它就會幫你監控了;然而,型別註記則是開發者必須手動宣告給 TS 看的