Closure Compiler を使用してかなり大きなライブラリを実行すると、多くの"Unknown type"
警告が表示されます。これらの警告は、型が自己実行型の無名関数で宣言されている場合に発生するようです。これには特別なことは何もありませんが、自己実行関数を取り除くと、型宣言が機能するように見えます (少なくともこの単純なテストでは)。
コードの注釈に何か問題があるのか、それともコードに違法なものがあるのか はわかりませんが、これはすべてコーシャであり、API をモジュール化する標準的な方法だと思います。
次のテスト コードは、名前空間 (単純な古い JS オブジェクト) を作成し、列挙型 (オブジェクト リテラル) と関数を関連付けます。
var mynamespace = {};
(function (mynamespace) {
/**
* Some enum.
* @enum {number}
*/
mynamespace.SomeEnum = {
FOO: 1,
BAR: 2
};
/**
* Frazzle some type.
* @param {mynamespace.SomeEnum} qux The type to frazzle.
* @return {boolean} whether the operation succeeded.
*/
mynamespace.frazzle = function(qux) {
return true;
}
}(mynamespace));
// call it
mynamespace.frazzle(mynamespace.SomeEnum.FOO);
いいですね。クロージャー コンパイラ エラー:
[jscomp] Compiling 1 file(s) with 37 extern(s)
[jscomp] X:\dev\solclientjs\sdk\tools\jscomptest.js:14: WARNING - Parse error. Unknown type mynamespace.SomeEnum
[jscomp] * @param {mynamespace.SomeEnum} qux The type to frazzle.