【发布时间】:2011-07-07 18:13:56
【问题描述】:
当我通过 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.
【问题讨论】:
-
在使用编译器一段时间后,我无法让它识别任何自定义数据类型。你? (至少这只是一个警告而不是真正的
error=) -
我确定这只是一个错字,但为了正确起见,您的匿名函数周围的右括号应该在传递 mynamespace 之前放置:) (function (mynamespace) { ... })(mynamespace)跨度>
-
@john_doe:无论哪种方式都可以。 Here's an example. 这是 StackOverflow 上的 a related question。
标签: javascript design-patterns google-closure-compiler jsdoc