vue源碼學習——認識flow

什麼是flow?

flow是Facebook出品的靜態類型檢查工具(vue.js 的源碼就是利用了flow做靜態類型檢查

爲什麼用flow?

  1. 因爲JavaScript是一種動態類型語言,靈活性強,但是過於靈活會帶來一些問題,很容易寫出非常隱蔽的隱患代碼,沒有明顯的語法錯誤編譯階段可能不會報錯,但是在運行階段會出現各種bug。
  2. 類型檢查就是在編譯階段發現由類型錯誤引起的bug,不影響代碼的運行,使得編寫JavaScript具有和編寫Java等強類型語言相近的體驗
  3. vue.js 2.0在ES6的基礎上,除了ESlint保證代碼風格外,引用了flow做靜態類型檢查,因爲Babel和ESLint都有對應的Flow插件以支持語法,可以完全沿用現有的構建配置,非常小成本的改動就可以擁有靜態類型檢查的能力

安裝使用flow

  1. npm i -g flow-bin 安裝flow
  2. flow init 初始化生成.flowconfig文件
    .flowconfig文件如下: (配置一些不做類型檢查的問價和做類型檢查的文件等等)
[declarations]
[include]
[ignore]
[untyped]
[libs]
[lints]
[options]
[version]

flow靜態類型檢查工作方式?

  1. 類型推斷 通過變量的使用上下文推斷出變量類型,然後根據這些推斷來檢查類型
    例子:
function strSplit (str) {
	str.split(' ')
}
strSplit(11)
// 從上下文可以推斷出傳入參數應該是一個String類型,但是傳入的是Number類型,所以在編譯的時候就會報錯。
  1. 類型註釋 事先註釋好我們期待的類型。Flow會基於這些註釋來判斷
/*@flow*/
function strSplit (str: string) {
	str.split(' ')
}

/*@flow*/這個標記表示該文件會進行類型檢查

flow怎麼識別引用的第三方庫,或者自定義的類型呢?

flow提出了一個libdef的概念,可以用來識別這些第三方庫或者自定義類型。

vue.js源碼中的自定義類型

vue.js源碼中的自定義類型主要在flow目錄下:
在這裏插入圖片描述
(類似Flow的工具還有Typescript)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章