用于闭包编译器的Regexp类型

时间:2012-06-01 15:54:23

标签: javascript regex types google-closure-compiler jsdoc

我目前正在为个人javascript模块添加类型注释,但是当我尝试键入以regexp作为参数的函数时,我现在被卡住了,但是下面的尝试都没有起作用:

/** @type {function(RegExp)} */
/** @type {function(regex)} */

我只是得到了:

WARNING - Bad type annotation. Unknown type regexp

我应该在声明中使用哪种类型?感谢。

2 个答案:

答案 0 :(得分:10)

RegExp对象在extern Closure Compiler中为es3.js添加了注释。这是一个接受RegExp对象的示例函数。

/**
 * @param {RegExp} regex A regular expression object.
 * @param {string} text Text to match.
 * @return {string} The first match in text.
 */
var firstMatch = function(regex, text) {
  var match = regex.exec(text);
  return match[1];
};

var text = 'Where art thou?';
var regex = new RegExp('^\\W*(\\w+)\\b', 'g');
var firstWord = firstMatch(regex, text);
alert(firstWord); // displays "Where"

使用 @type 注释的相同功能:

/** @type {function(RegExp, string): string} */
var firstMatch = function(regex, text) {
  var match = regex.exec(text);
  return match[1];
};

默认外部

Closure Compiler包含default externs,例如es3.js,es5.js和es6.js. 除非设置了以下标志,否则通常不需要明确指定这些外部文件

Closure Compiler Application --use_only_custom_externs=true

Closure Compiler Service UI @exclude_default_externs true

Closure Compiler Service API exclude_default_externs=true

额外的外部人员

contrib/externs下可用的其他外部设备默认不包含在内。可以使用--externs标志指定这些外部。

答案 1 :(得分:0)

根据GCC's list of types,JSDoc中没有单独的正则表达式类型,而regexp本身具有“对象”类型。如果您希望使注释更具可读性和意义,可以使用@typedef将“regexp”别名为“object”。如果实际添加了此类型,它还可以在将来快速适应 - 您只需要删除或更改别名。