Javascript 注释由构造函数参数设置的实例属性?
当使用google闭包编译器时,是否需要注释由构造函数参数设置的属性?e、 gJavascript 注释由构造函数参数设置的实例属性?,javascript,google-closure-compiler,google-closure,Javascript,Google Closure Compiler,Google Closure,当使用google闭包编译器时,是否需要注释由构造函数参数设置的属性?e、 g /** * @constructor * @param {string} bar * @param {number} barPrivate */ var Foo = function(bar, barPrivate) { this.bar = bar; this.barPrivate_ = barPrivate; }; 如果我写这篇文章,编译器是否足够聪明,能够理解: bar属性的类型为{strin
/**
* @constructor
* @param {string} bar
* @param {number} barPrivate
*/
var Foo = function(bar, barPrivate) {
this.bar = bar;
this.barPrivate_ = barPrivate;
};
如果我写这篇文章,编译器是否足够聪明,能够理解:
bar
属性的类型为{string}
barPrivate
属性的类型为{number}
barPrivate
属性是@private
/**
* @constructor
* @param {string} bar
* @param {number} barPrivate
*/
var Foo = function(bar, barPrivate) {
/** @type {string} */
this.bar = bar;
/** @private {number} */
this.barPrivate_ = barPrivate;
};
后一种形式似乎不那么“干燥”,但我们一直在用它来保证安全。我还没有找到任何关于这方面的文档
在做了一些简单的探索之后
是一样的
... 对我来说,这意味着可见性声明可能是必需的,但类型声明不是必需的?我必须运行一些测试才能确定,但我的理解是:
bar
是类型string
,barPrivate
是类型number
。但仅限于构造函数调用的持续时间。它不会强制执行this.bar
在以后的代码中只能是字符串@private
访问,如显式示例中所示编辑:正如Chad Killingsworth指出的,在这个简单的例子中,编译器可以推断
this.bar
是一个没有附加注释的字符串;但是如果其他类型被分配到this.bar
的其他位置,那么“所有赌注都输掉了”,我不知道编译器会做什么。是的,根据我运行的测试,我认为您的理解是正确的。我最感兴趣的是它是否知道this.bar的类型。在其他方法中,根据我的测试,答案是一个限定的“否”(限定的原因是AST似乎仍然报告正确的类型,但编译器不会发出我期望的警告,除非我显式地解释类型)。添加CHECK\u TYPES\u NEW\u接口似乎也不能真正解决问题:-/。编译器应该正确推断this.bar
在所有情况下都是字符串,即使在构造函数之外,也没有附加注释<但是需要code>@private
。