flow

  • flow 是 Facebook 出品的 JavaScript 靜態(tài)類型檢查工具闽巩。 vue 的源碼利用了 flow 做了靜態(tài)檢查.

為什么用 flow

  • JavaScript 是動(dòng)態(tài)類型語言耻卡,它的靈活性很高,但是其副作用就是會(huì)容易寫出非常隱蔽的有隱患的代碼。
  • 并且類型檢查是當(dāng)前動(dòng)態(tài)類型語言的一個(gè)發(fā)展趨勢(shì),什么是類型檢查? -> 就是在編譯的時(shí)候盡早發(fā)現(xiàn) bug, 又不會(huì)影響代碼的運(yùn)行豫柬。
  • 當(dāng)項(xiàng)目越復(fù)雜的時(shí)候告希,就越需要通過一些工具來檢測(cè)項(xiàng)目的維護(hù)性,代碼的可讀性烧给。vue 在重構(gòu) 2.0 的時(shí)候燕偶,在 ES2015 的基礎(chǔ)上,除了用 ESLint 保證代碼風(fēng)格更以外础嫡,也引入了 flow 做靜態(tài)類型檢查指么。為什么選擇 flow ,主要是因?yàn)?Babel 和 ESLint 都有對(duì)應(yīng)的 flow 插件的支持語法榴鼎。

flow 的使用方式

  • 類型推斷: 通過變量的使用上下文來推斷變量類型伯诬,然后根據(jù)這些推斷來檢查類型。
  • 類型注釋: 事先注釋好我們期待的類型檬贰,flow 會(huì)基于這些注釋類判斷

類型判斷

  • 它不需要任何代碼修改即可進(jìn)行類型檢查姑廉。

      /*@flow*/
      function split(str) {
        return str.split(' ')
      }
      split(11)
    
  • flow 檢查上述代碼就會(huì)報(bào)錯(cuò)缺亮,因?yàn)楹瘮?shù)期待的參數(shù)是字符串翁涤,而不是數(shù)字

類型注釋

  • 類型推斷是 flow 最有用的特性之一,不需要寫類型注釋就能獲取有用的反饋萌踱。但在有些場(chǎng)景下葵礼,添加類型注釋可以提供更好的檢查依據(jù)。

      例如:
      function add(x, y) {
        return x + y;
      }
    
      add('你好', 66)
    
  • flow 檢查上述代碼的時(shí)候會(huì)檢測(cè)不出任何錯(cuò)誤并鸵,在語法的層面考慮鸳粉,+ 即可以用在字符串上,也可以用在數(shù)字上园担,而上述并沒有指出必須為數(shù)字届谈。

  • 這種情況下,就可以借助類型注釋來指明期望的類型弯汰,類型注釋以冒號(hào) : 開頭

      function add(x: number, y: number): number {
        return x + y;
      }
    
      add('你好', 66)
    
  • 這樣 flow 就能檢查出錯(cuò)誤艰山,因?yàn)槲覀兤诖膮?shù)類型是數(shù)字。

數(shù)組

  /*@flow*/

  const arr: Array<number> = [1, 2, 3]
  arr.push('haha')
  • 數(shù)組類型注釋的格式是 Array<T> 咏闪,T 表示數(shù)組中每項(xiàng)的數(shù)據(jù)類型曙搬。

類和對(duì)象

  /*@flow*/

  const foo: ?string = null

  • foo 可以為字符串,也可以為 null鸽嫂。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纵装,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子据某,更是在濱河造成了極大的恐慌橡娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癣籽,死亡現(xiàn)場(chǎng)離奇詭異挽唉,居然都是意外死亡扳还,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門橱夭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氨距,“玉大人,你說我怎么就攤上這事棘劣∏稳茫” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵茬暇,是天一觀的道長(zhǎng)首昔。 經(jīng)常有香客問我,道長(zhǎng)糙俗,這世上最難降的妖魔是什么勒奇? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮巧骚,結(jié)果婚禮上赊颠,老公的妹妹穿的比我還像新娘。我一直安慰自己劈彪,他們只是感情好竣蹦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沧奴,像睡著了一般痘括。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滔吠,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天纲菌,我揣著相機(jī)與錄音,去河邊找鬼疮绷。 笑死翰舌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矗愧。 我是一名探鬼主播灶芝,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼唉韭!你這毒婦竟也來了夜涕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤属愤,失蹤者是張志新(化名)和其女友劉穎女器,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體住诸,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驾胆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涣澡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧诺。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡入桂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驳阎,到底是詐尸還是另有隱情抗愁,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布呵晚,位于F島的核電站蜘腌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饵隙。R本人自食惡果不足惜撮珠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望金矛。 院中可真熱鬧芯急,春花似錦、人聲如沸绷柒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废睦。三九已至,卻和暖如春养泡,著一層夾襖步出監(jiān)牢的瞬間嗜湃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工澜掩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留购披,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓肩榕,卻偏偏與公主長(zhǎng)得像刚陡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子株汉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)如何在Flow中使用React 將Flow類型添加到React組件后筐乳,F(xiàn)low將靜態(tài)地確保你按照組件被設(shè)計(jì)的方...
    vincent_z閱讀 6,330評(píng)論 4 21
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,131評(píng)論 0 13
  • 在vue2.0的項(xiàng)目中加入flow類型檢查乔妈。當(dāng)前項(xiàng)目是用js寫的蝙云,當(dāng)項(xiàng)目越來越大,由于js弱類型的特性路召,相比ts(...
    ltinyho閱讀 1,698評(píng)論 0 50
  • js 擴(kuò)展:靜態(tài)類型檢查(facebook flow) js 語言與 java勃刨、C 系列等語言有一點(diǎn)很大的不同波材,就...
    senntyou閱讀 617評(píng)論 0 0
  • 楔子 還未到中午,蘇陽路的紅橙小區(qū)已經(jīng)漸漸沉寂下來身隐。 72路末班車在蘇陽路西站停下廷区,沒見有人下車,只有一只烏漆漆...
    璃茉i閱讀 410評(píng)論 3 1