js語言進(jìn)階 - Flow

flow
靜態(tài)類型檢查工具,給javaScript提供靜態(tài)類型檢查能力,為其增加了一個(gè)編譯的過程

開始

安裝babel和flow
babelflow安裝后,yarn run flow init,生成.flowconfig文件

基本使用

// 需要給文件添加@flow標(biāo)記贩幻,否則flow不會(huì)對(duì)文件進(jìn)行類型檢測
// @flow

var a /*: number*/ = 10;

var a: number = 10;

a = "abc";

console.log(a);


function sum(a: number, b: number) {
    return a + b;
}

sum(1, 2);
sum("123", "456")

pacakge.json,scripts中添加"flow": "flow"
yarn run flow來檢測有無錯(cuò)誤

yarn run build將文件打包到lib文件夾下两嘴,此時(shí)打包好的文件已經(jīng)經(jīng)過babel的處理丛楚,可以正常運(yùn)行

數(shù)據(jù)類型

概覽圖
// @flow

// number:數(shù)字、NaN憔辫、Infinity
let a: number = 1
let b:number = NaN
let c:number = Infinity

// string:字符串
let str: string = 'aaa'

// boolean
// void - js中undefined
// null - js中null

// Array:必須指定元素類型趣些,不想指定用any
let arr1: Array<number> = [1, 2]
let arr2: Array<any> = [1, '2']

// any
let name: any = 123
name = '123'

簡化錯(cuò)誤處理邏輯

求和函數(shù)
不用flow的錯(cuò)誤處理邏輯如下


使用flow的完整代碼如下

// @flow

function sum(arr: Array<number>) {
  return arr.reduce((total, prev) => {
    return total + prev
  })
}

sum([1, 2, 3])

函數(shù)類型

// @flow
function test(a: number, b: number): number {
  return a + b
}

// 將變量聲明為函數(shù)類型
let func: (a: number, b: number) => number = test

maybe類型

//@flow
// maybe:給數(shù)據(jù)添加了null和void
function test(a: ?number) {
  a = a || 1
  console.log(a)
}
test(10)
test()

或操作

//@flow
let a: number|string = 10
a = 'ccc'

類型推斷

//@flow
function test(a: number, b: number) {
  return a + b
}
let c:string = test(2, 3)

會(huì)報(bào)錯(cuò),因?yàn)轭愋屯茢?code>c不可能是string

對(duì)象類型

//@flow
function hi(obj: {sayHello: () => void, name: string}) {
  obj.sayHello()
}
let singer = {
  name: 'jayChou',
  sayHello () {
    console.log('hi~~~')
  }
}
hi(singer)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贰您,一起剝皮案震驚了整個(gè)濱河市坏平,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锦亦,老刑警劉巖舶替,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杠园,居然都是意外死亡顾瞪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抛蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陈醒,“玉大人,你說我怎么就攤上這事瞧甩《危” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵肚逸,是天一觀的道長爷辙。 經(jīng)常有香客問我,道長朦促,這世上最難降的妖魔是什么犬钢? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮思灰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘混滔。我一直安慰自己洒疚,他們只是感情好歹颓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著油湖,像睡著了一般巍扛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乏德,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天撤奸,我揣著相機(jī)與錄音,去河邊找鬼喊括。 笑死胧瓜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郑什。 我是一名探鬼主播府喳,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蘑拯!你這毒婦竟也來了钝满?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤申窘,失蹤者是張志新(化名)和其女友劉穎弯蚜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剃法,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碎捺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玄窝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牵寺。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恩脂,靈堂內(nèi)的尸體忽然破棺而出帽氓,到底是詐尸還是另有隱情,我是刑警寧澤俩块,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布黎休,位于F島的核電站,受9級(jí)特大地震影響玉凯,放射性物質(zhì)發(fā)生泄漏势腮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一漫仆、第九天 我趴在偏房一處隱蔽的房頂上張望捎拯。 院中可真熱鬧,春花似錦盲厌、人聲如沸署照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽建芙。三九已至没隘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禁荸,已是汗流浹背右蒲。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赶熟,地道東北人瑰妄。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像钧大,于是被迫代替她去往敵國和親翰撑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • babel官網(wǎng) babel 介紹 Babel 是一個(gè)通用的多用途 JavaScript 編譯器啊央。通過 Babel ...
    鋒享前端閱讀 1,826評(píng)論 0 10
  • Babel 入門指南 ?:warning: 注意:Babel 可以與很多構(gòu)建工具(如 Browserify眶诈、Gru...
    靜默虛空閱讀 2,549評(píng)論 0 4
  • babel官網(wǎng) babel 介紹 Babel 是一個(gè)通用的多用途 JavaScript 編譯器。通過 Babel ...
    不得不愛XIN閱讀 1,143評(píng)論 0 9
  • Babel是一個(gè)廣泛使用的轉(zhuǎn)碼器瓜饥,可以將ES6代碼轉(zhuǎn)為ES5代碼逝撬,從而在現(xiàn)有環(huán)境執(zhí)行。 這意味著乓土,你可以現(xiàn)在就用 ...
    yichen_china閱讀 1,314評(píng)論 0 3
  • 4月15號(hào)復(fù)盤 米果果教育 張瀅 【每日目標(biāo)】 每天三目標(biāo) 1.營養(yǎng)早餐 ? 2.早起晨練? 3.每日復(fù)盤? 【每...
    米果果教育張瀅閱讀 289評(píng)論 0 1