是否有任何理由将@type用于具有高级编译的私有变量?

时间:2015-07-06 22:36:39

标签: javascript google-closure-compiler jsdoc

JSDoc文档说JSDoc仅用于生成API文档,但我们也使用Google的Closure Compiler进行高级编译

在函数范围内,我们有很多字符串,例如

var cssLeft, cssTop, cssWidth, cssHeight, cssMinWidth, cssMinHeight, cssMaxWidth, cssMaxHeight, cssTransform;

是否有理由在每个变量中包含@type {string}

3 个答案:

答案 0 :(得分:1)

对于JSDoc,没有必要,因为变量没有暴露。

对于Google Closure编译器,定义类型不会造成伤害,并且可能加快速度和/或缩小生成的代码

使用@type的原因:没有理由不

答案 1 :(得分:1)

如果值类型已知,Closure Compiler通常会推断出局部变量的类型。声明值的类型使编译器可以在分配值时告诉您该值是否为意外类型。如果您没有重新分配EcmaScript 6" const"是优选的,或者简单地只是@const:

/** @const */ var x = ...

请注意,Closure Compiler还支持" inline"如果决定要声明类型,请键入语法:

var /** string */ x = ..., /** string */ y = ...

答案 2 :(得分:1)

根据您指定可见性的经验,您可以在编译期间获得更简洁和高级的编译错误检查。

来自封闭编译器Doc 将成员标记为私有。
只有同一文件中的代码才能访问标记为@private的全局变量和函数。
标记为@private的构造函数只能由同一文件中的代码以及静态和实例成员实例化。

标记为@private的构造函数的公共静态属性也可以在任何地方访问,而instanceof运算符始终可以访问@private成员。

例如:

  

/ ** *正在侦听此记录器的处理程序。
* @private   {Array} * / this.handlers_ = [];

此处有更多信息https://developers.google.com/closure/compiler/docs/js-for-compiler