這是我參與8月更文挑戰的第22天,活動詳情檢視: 8月更文挑戰
基礎知識
any
- any比較特殊,其實它既是Top TYPE又是Bottom Type,也就是說: any類型的常量/變量可以與任何其他類型的變量/常量互相指派,但是any類型是不安全的,無語言服務的,是以應該盡量避免使用。
- any具有傳染性: 它會使它所觸及的地方變得不安全,是以TS在3.0引入了類型安全的unknown類型作為Top Type.
- any會隐藏bug
- any會隐藏代碼設計細節:丢失了對資料類型的設計
unknown
- unknown類型必須顯示注解,TS不會把任何值推導為unknown
- unknown類型隻能進行等于和不等于比較
- 隻有類型收窄後才能進行相應運算或函數調用
boolean
布爾類型隻有兩個元素:true和false
- let var變量會被拓寬成boolean類型,const常量就是對應字面量類型
- true和false的聯合類型,會被反推回boolean類型
TypeScript進階
類型操作keyof
keyof是在TS2.1引入的,它擷取類型上所有已知、public鍵對應的類型聯合。
接口
接口與類型别名可以認為是同一概念的兩種文法。下面介紹下接口與類型别名的差別。
- 類型别名更為通用,其右側可以包含類型表達式,但接口右側隻能是某種結構。
- 接口間繼承時TS會檢查二者關系,但類型聯合時TS會盡最大阻力嘗試不會報錯。
- 同一個作用域的多個同名接口聲明會被合并。而多個同名類型别名會報錯。
類
class是ES2015引入的新特性,class本質上還是一個函數。作為構造器的函數,必須具有prototype屬性,并且prototype類型和構造器傳回值的類型相同。