天天看點

【青訓營】- TypeScript進階筆記

這是我參與8月更文挑戰的第22天,活動詳情檢視: 8月更文挑戰

基礎知識

any

  1. any比較特殊,其實它既是Top TYPE又是Bottom Type,也就是說: any類型的常量/變量可以與任何其他類型的變量/常量互相指派,但是any類型是不安全的,無語言服務的,是以應該盡量避免使用。
  2. any具有傳染性: 它會使它所觸及的地方變得不安全,是以TS在3.0引入了類型安全的unknown類型作為Top Type.
  3. any會隐藏bug
  4. any會隐藏代碼設計細節:丢失了對資料類型的設計

unknown

  • unknown類型必須顯示注解,TS不會把任何值推導為unknown
  • unknown類型隻能進行等于和不等于比較
  • 隻有類型收窄後才能進行相應運算或函數調用

boolean

布爾類型隻有兩個元素:true和false
  • let var變量會被拓寬成boolean類型,const常量就是對應字面量類型
  • true和false的聯合類型,會被反推回boolean類型

TypeScript進階

類型操作keyof

keyof是在TS2.1引入的,它擷取類型上所有已知、public鍵對應的類型聯合。

接口

接口與類型别名可以認為是同一概念的兩種文法。下面介紹下接口與類型别名的差別。
  1. 類型别名更為通用,其右側可以包含類型表達式,但接口右側隻能是某種結構。
  2. 接口間繼承時TS會檢查二者關系,但類型聯合時TS會盡最大阻力嘗試不會報錯。
  3. 同一個作用域的多個同名接口聲明會被合并。而多個同名類型别名會報錯。

class是ES2015引入的新特性,class本質上還是一個函數。作為構造器的函數,必須具有prototype屬性,并且prototype類型和構造器傳回值的類型相同。

繼續閱讀