類型斷言typescript
類型聲明(declare)npm
以前講語法,以爲這些既屬於語法,可是不是特殊的類型,一時間不知道怎麼分類,因此就作爲類型補充知識。bash
隱式類型推斷 : 若是咱們沒有明確經過類型註解去標註這個變量的類型,那麼TypeScript
根據一些能夠推斷出這個類型。函數
下面這個例子:學習
若是咱們沒有設定類型,賦值了一個數字,那麼會推斷這個爲number
類型,以後再賦值爲字符串,就會報類型錯誤。url
若是TypeScript
沒法推斷這個變量的類型,就會定爲any
,後面賦值什麼類型均可以。spa
開發的時候仍是建議你們爲每一個變量添加明確的類型,爲了後期更直觀的理解代碼。3d
TypeScript
有時沒法推斷出來一些變量的類型,可是咱們能夠明確知道,因此有些時候它給了咱們一些不肯定選項的時候咱們能夠斷言成肯定的類型。使用類型斷言就能夠輔助ts
更加明確每一個變量的類型。code
TypeScript
類型斷言不是類型轉換,類型轉換是在運行階段,斷言是在編譯階段,編譯事後斷言就不存在了。
舉個例子:blog
const nums = [110, 120, 119, 112] // 下面返回的 res ,ts認爲多是number,也多是undefined const res = nums.find(i => i > 0) // 若是下面要對res進行運算,res直接運算就會報錯 const square = res * res // 報錯,就要斷言它爲number類型才行
使用as就能夠明確num1
是一個數字,下面就可使用數字運算
const num1 = res as number
這個尖括號和jsx
的標籤產生衝突,那種狀況不推薦使用
const num2 = <number>res
開發過程當中咱們會用到第三方模塊,這些模塊並不都是用typeScript
編寫的,因此它的成員可能就沒有強類型體驗。
typescript
匹配的類型聲明,能夠直接使用declare
)存在的緣由是爲了兼容普通的js模塊.
使用lodash
舉例子,lodash
自己沒有集成類型聲明,因此使用的時候會報錯。咱們能夠本身手動進行類型聲明
下面的函數,直接調用camelCase
沒有類型提示,因此在前面添加declare
對函數camelCase
進行參數和返回值的限制,這樣能夠看到這個函數有了類型的提示
那上面的lodash
仍是報錯,那麼咱們看可能須要下一些東西進行兼容,由於TS
社區比較強大,大部分的第三方模塊都有對應的類型聲明,直接安裝其對應的類型聲明模塊(通常是@types/模塊名
)便可.
類型聲明是開發依賴,裏面不會提供任何的代碼,只是對模塊作對應的類型聲明
安裝
# yarn yarn add @types/lodash --dev # npm npm i @types/lodash
安裝以後lodash可看到裏面有不少.d.ts
的類型聲明文件,對應的代碼中就有對應的類型聲明提示了
query-string
—— 解析query
中的url
字符串
自己包裏面集成了類型聲明文件,不須要額外再安裝。
# yarn yarn add query-string # npm npm i query-string
使用的時候看到有類型聲明的介紹