是否有任何理由在高级编译中为私有变量使用@type ?

Is there any reason to use @type for private variables with advanced compilation?

本文关键字:变量 @type 理由 任何 高级 编译 是否      更新时间:2023-09-26

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

在函数作用域中,我们有许多字符串,例如

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

是否有任何理由为每个变量包括@type {string} ?

对于JSDoc,不需要这样做,因为变量没有公开。

对于Google闭包编译器,定义类型没有坏处,而且可能会加快速度和/或减少生成的代码

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

如果值类型已知,闭包编译器通常会推断出局部变量的类型。声明值的类型可以使编译器在赋值时告诉您该值是否属于意外类型。如果你不重新分配EcmaScript 6 "const"是首选,或者干脆@const:

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

请注意,如果你决定声明类型,闭包编译器也支持"内联"类型语法:

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

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

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

标记为@private的构造函数的公共静态属性也可以在任何地方访问,并且instanceof操作符总是可以访问@private成员。

例如:

/** *正在监听此记录器的处理程序。
* @private{Array} */this。

更多信息在这里https://developers.google.com/closure/compiler/docs/js-for-compiler