簡體   English   中英

Google Closure Compiler 100%打字

[英]Google Closure Compiler 100% typed

如何讓我的應用程序在谷歌閉包編譯器方面100%打字?

我已經使用jsdoc注釋標記了所有內容。 甚至可以獲得100? 我在64.6%

有可能達到100%。 我自己的項目是100%打字的。 閉包編譯器可以輸出有關未知類型的表達式的警告。 遺憾的是,沒有命令行選項來啟用此功能。 您必須修改源代碼才能啟用它:

  1. 下載當前來源:

    git clone https://code.google.com/p/closure-compiler/

  2. 編輯src / com / google / javascript / jscomp / CompilerOptions.java並將reportUnknownTypes = CheckLevel.OFF行更改為reportUnknownTypes = CheckLevel.WARNING

  3. 只需在根目錄中調用ant即可編譯閉包編譯器。 修改后的compiler.jar現在位於構建目錄中。

當您在腳本上使用此修改后的編譯器時,它會針對編譯器無法確定類型的所有表達式發出大量警告。 當您在代碼中修復所有這些警告時,它將100%鍵入。

編譯器有一個標志,您可以設置該標志以使未知類型輸出警告。

--jscomp_warning=reportUnknownTypes

您還需要提高警告級別。

--warning_level=VERBOSE

我嘗試編譯goog.net.XhrIo作為測試:

goog.require('goog.Uri.QueryData');
goog.require('goog.debug.ErrorHandler');
goog.require('goog.net.XhrIo');

goog.net.XhrIo;

當我編譯這個時,我有這個結果:

20-nov-2010 1:12:21 com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 1 warning(s), 91,5% typed
JSC_USELESS_CODE. Suspicious code. This code lacks side-effects. Is there a bug? at test.js line 5 : 0

似乎封閉庫本身並非100%打字,我認為目標不是達到100%。 Javascript不是靜態類型語言。 Closure試圖將靜態類型語言的一些好處帶入javascript。 這很好。 但這並不意味着你必須承擔這種語言的負擔。

編輯:

我試圖編譯一個空文件,結果是90.4%。 我認為這意味着具有所有原始函數的base.js不是100%類型的。 所以我做了一些實驗,發現當我還在所有局部變量上輸入類型信息時,百分比會上升。 我認為沒有必要在所有局部變量上放置類型信息。 我的意思是想象一下:

/** @type {number} */
var i = 0;
for(i = 0; i < 10; i++) {
  // do something
}

這不是使用閉包編譯器進行編譯的目標。 事實證明,編譯base.js不會導致100%。 我試着在我的開發中將這個數字保持在85%到95%之間。 根據您的時間,編程風格和您正在處理的應用程序可能會有所不同。 最好的指導方針是在整個應用程序開發過程中盡量保持百分比不變,無論是60%還是90%。 只需根據需要進行盡可能多的打字,以使您熟悉自己的代碼。

所有學分都歸@kayahr所有,但時間過去了。 我想提供一個基於舊版本編譯器的答案的更新。

您需要使用強制類型檢查重新編譯源代碼。 為此:

  1. 下載源git clone https://code.google.com/p/closure-compiler/並轉到closure-compiler

  2. 編輯src/com/google/javascript/jscomp/CompilerOptions.java並將checkTypes設置為true 。您還可以使用各種編譯和優化變量。

  3. 通過運行ant編譯代碼

但請注意, tightenTypes是實驗性的並且非常破碎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM