當前位置:
首頁 > 知識 > 編譯期類型檢查 in ClojureScript

編譯期類型檢查 in ClojureScript

ClojureScript與JavaScript一樣採取動態類型,但由於需要通過Google Closure
Compiler編譯後才能運行,因此我們可以如同JS那樣藉助GCC的註解來引入編譯時類型檢查,達到同樣靜態類型的效果。


配置項目設置

GCC的編譯時類型檢查僅當optimizations為simple或advanced時有效。我們以:cljsbuild下的dev配置為例

編譯期類型檢查 in ClojureScript

請注意,:check-types必須設置為:warning,若設置為:error時,就會報Math.imul引發的JSC_DUP_VAR_DECLARATION_TYPE_MISMATCH異常,導致項目其他代碼均不能被編譯。希望大神指點迷津~~


註解語法

首先GCC用到的註解語法僅為JSDoc的子集,所以直接看GCC的註解即可,而ClojureScript一般就用如下幾個

編譯期類型檢查 in ClojureScript

接下來就是重點了,我們寫了這麼多還不就是想引入數據的類型描述嗎?那關鍵就是上述代碼中Type到底應該怎麼寫了!

1.標量類型number,string,boolean,null,undefined

注意

·一標量類型默認表示變數或參數的實際值為不可為null(non-nullable)。若要標識為可為null(nullable),那麼只需前置一個問號?即可(?number,?string)

2.對象類型Object,Function,Number,String,Boolean,Date和其他Cljs或自定義的對象類型。

注意

·對於非全限定的對象類型,會自動展開為當前命名空間的類型(如當前命名空間為my-proj.core,那麼MyArray會展開為my-proj.core/MyArray)

·對象類型默認表示變數或參數的實際值可為null(nullable)。若要標識為不可為null(non-nullable),那麼只需前置一個感嘆號!即可(如!Object,!Date等)

3.組合類型,如(number|string),即是實際值可為數字也可為字元串。

4.集合/字典,Array表示為數組類型且其元素類型可以繼續遞歸下去,Object表示為對象類型且鍵類型為Type,Object<type1,type2表示為對象類型且鍵類型為type1而值類型為type2< p="">

5.函數類型

function(Type1,Type2),表示函數含數據類型為Type1和Type2兩個形參。

function(Type1,Type2):Type3,表示函數含數據類型為Type1和Type2兩個形參,且返回值類型為Type3。

function(...Type),表示函數含數據類型為Type的可變形參,注意可變形參必須作為最後一個形參出現。

function(Type=),表示函數含可選的數據類型為Type的形參,注意可選形參後不能聲明必填的形參。

注意注意!

1.)形參和逗號間千萬不要留空格,否則編譯時會報警告的哦!

2.)Type為function()時不能在聲明返回值類型,否則編譯時輝報警告!

編譯期類型檢查 in ClojureScript

6.什麼類型都可以 *


實例

1.封裝chrome.runtime.onMessage玩玩

編譯期類型檢查 in ClojureScript

注意:window.MessageSend既不是GCC內置的類型也不是我們自定義類型,而是外部定義的數據類型,因此我們需要添加externs文件讓GCC識別。

因此得到的配置如下

編譯期類型檢查 in ClojureScript


總結

如官網所講,這部分的內容仍在發展階段,所以還有很多不完善的地方。不過也不影響我們現在就開始使用,因此良好的代碼注釋從來都需要的!

(轉自博客園)



2017中公教育特別推出勤工儉學計劃:http://www.ujiuye.com/zt/qgjx/?wt.bd=bgz

還有500萬的就業基金等著你:http://www.ujiuye.com/zt/jycj/?wt.bd=bgz

海量IT課程學習就在優學網:http://xue.ujiuye.com/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

你身邊有哪些人硬生生地活成了段子?
現在的微博,也就是靠傍傍鹿晗才能刷存在感了?
一張圖理清ASP.NET Core啟動流程
流程引擎的網關|BPMN2.0設計總結

TAG:IT優就業 |