Google Closure でArray
、特定の@type {Array.<type>}
が初期化されている場合、Google Closure が配列の内容を確認できると確信できますか?
ここに小さなテストケースがあります。aは同じチェックによって正しくブロックされていますが、 an がチェックを{Array.<string>}
すり抜けているように見えます。私はGCに少し慣れていませんが、これは私の側のエラーですか?{Array.<number>}
{string}
これをGoogle Closure Serviceに貼り付けましたが、予想される 2 つのエラー (2013 年 9 月 12 日) のうちの 1 つしか表示されません。ADVANCED_OPTIMIZATIONS
とwarning_level VERBOSE
. _ {Array.<string>}
それはまだこっそり通り過ぎるように見えます。
ドキュメント: Google クロージャーの注釈
ご意見をお寄せいただきありがとうございます。
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level VERBOSE
// @language ECMASCRIPT5
// ==/ClosureCompiler==
/**
no warning, as expected:
@type {Array.<number>}
*/
var a = [1,2,3,4];
/**
warning! Type mismatch as expected:
@type {Array.<number>}
*/
var b = 'mismatch'; // {string} does not match {Array.<number>}
/**
no warning, but Type mismatch was expected:
@type {Array.<number>}
*/
var c = ['foo','bar']; // {Array.<string>} should not match {Array.<number>}
// prevent compile-to-zero
alert(a);
alert(b);
alert(c);
注: Array.push() のタイプが手動で入力されたこの関連する質問を 詳しく調べました。ただし、この質問は初期化に関するものです。上記のように、彼の修正されたコードを取得し、すべての配列をガベージ データで初期化すると、GC は彼の場合もガベージをキャッチできません。
編集済み:念のため、テスト ケースのヘッダーにwarning_level VERBOSE
とを追加しました。まだ検出されていません。language ECMASCRIPT5
{Array.<string>}