強(qiáng)類型與弱類型(類型安全)
強(qiáng)類型在語言層面限制函數(shù)的實(shí)參類型必須與形參類型相同亲桦;強(qiáng)類型語言中不允許有任意的數(shù)據(jù)隱式類型轉(zhuǎn)換崖蜜,但弱類型相反。
變量類型允許隨時(shí)改變的特點(diǎn)客峭,不是強(qiáng)弱類型的差異豫领。
靜態(tài)類型與動(dòng)態(tài)類型(類型檢查)
靜態(tài)類型:一個(gè)變量聲明時(shí)它的類型就是明確的,聲明過后它的類型就不允許再修改舔琅。
動(dòng)態(tài)類型:運(yùn)行階段才能夠明確變量類型等恐,而且變量的類型可以隨時(shí)發(fā)生變化。
JavaScript自有類型系統(tǒng)的問題
弱類型的問題
- 由于js是腳本語言不存在編譯環(huán)節(jié)备蚓,如果存在變量類型錯(cuò)誤那么只有在運(yùn)行時(shí)才會(huì)報(bào)錯(cuò)课蔬,如果存在耗時(shí)長的異步任務(wù),那么這個(gè)錯(cuò)誤很可能就會(huì)被忽略掉成為隱患郊尝;
- 多人協(xié)同開發(fā)時(shí)很可能會(huì)傳遞錯(cuò)誤的參數(shù)類型出現(xiàn)bug二跋,由于類型不明確就會(huì)造成函數(shù)功能發(fā)生改變;
- 出現(xiàn)對(duì)對(duì)象索引器錯(cuò)誤的用法流昏。
強(qiáng)類型的優(yōu)勢(shì)
- 錯(cuò)誤更早暴露扎即;
- 代碼更智能吞获,編碼更準(zhǔn)確;
- 重構(gòu)更牢靠谚鄙;
- 減少不必要的類型判斷各拷。
Flow靜態(tài)類型檢查方案
可以在變量后面增加: type
對(duì)變量進(jìn)行類型注解。
-
使用步驟:
- 添加flow-bin闷营;
- 在需要使用flow進(jìn)行類型檢查的文件頭部增加如下注釋標(biāo)記撤逢;
//@flow
- 為變量添加類型注解。
-
Flow編譯移除注解
- 安裝flow-remove-types
- 安裝bable/core bable/cli babel/preset-flow
Flow開發(fā)工具插件
Flow Language SupportFlow類型推斷
根據(jù)代碼使用情況推斷變量的類型粮坞。Flow類型注解
除了對(duì)函數(shù)參數(shù)進(jìn)行類型注解外,還可以對(duì)變量和函數(shù)返回值類型進(jìn)行類型注解初狰。在括號(hào)后加上: type
可以對(duì)函數(shù)返回值進(jìn)行類型注解莫杈,如果返回值為空,那么類型為void
奢入。原始類型
string筝闹、number(NaN,Infinity無窮大)腥光、boolean关顷、null、undefined(用void表示)武福、symbol數(shù)組類型
Array<number>议双、number[]
元組:[string, number] 可用于函數(shù)返回多個(gè)參數(shù)對(duì)象類型
{ [string]: string }
還可以在對(duì)象中指定任意鍵值對(duì)的類型,如果這個(gè)鍵值對(duì)可有可無那么加上?
函數(shù)類型
特殊類型
字面量類型(一般配合聯(lián)合類型使用)捉片;
通過type關(guān)鍵字給類型使用別名或者用type單獨(dú)聲明一個(gè)類型平痰;
maybe類型。Mixed & Any
mixed為強(qiáng)類型伍纫,any為弱類型(盡量不使用宗雇,作用是為了兼容老代碼)運(yùn)行環(huán)境API
TypeScript語言規(guī)范與基本應(yīng)用
TypeScript是ES6 JavaScript類型化的超集,相比于JavaScript多了類型校驗(yàn)系統(tǒng)和ES6標(biāo)準(zhǔn)莹规。
-
使用步驟:
- 安裝typescript赔蒲;
- 使用
tsc
(typescript compile)命令編譯typescript文件,會(huì)檢查代碼中的類型使用異常良漱、移除類型注解的擴(kuò)展語法舞虱、自動(dòng)轉(zhuǎn)化ES新特性。
配置文件
使用yarn tsc --init
自動(dòng)生成配置文件母市。ts標(biāo)準(zhǔn)庫聲明
標(biāo)準(zhǔn)庫就是內(nèi)置對(duì)象所對(duì)應(yīng)的聲明砾嫉。
中文錯(cuò)誤消息
使用yarn tsc --local zh-CN
以中文顯示錯(cuò)誤消息。(不推薦)-
作用域問題
- 可以使用立即執(zhí)行函數(shù)窒篱,將變量放到函數(shù)作用域里焕刮;
- 使用
export
將文件作為模塊使用舶沿。
ts類型
建議為每個(gè)變量添加明確的類型。
- 枚舉類型
用關(guān)鍵字enum
聲明配并,=
進(jìn)行賦值括荡。如果不指定值則默認(rèn)從0開始累加;第一個(gè)變量如果賦值數(shù)字溉旋,后面的變量也會(huì)在此基礎(chǔ)上開始累加畸冲。 - 任意類型
any類型是不安全的,不要輕易使用观腊。 - 類型斷言
接口
使用interface
關(guān)鍵詞聲明邑闲,約束對(duì)象的結(jié)構(gòu)。
- 可選成員
?:
- 只讀成員
readonly
- 動(dòng)態(tài)成員
[key: string]: string