【问题标题】:Regexp type for closure compiler闭包编译器的正则表达式类型
【发布时间】:2012-06-06 21:21:16
【问题描述】:

我目前正在向个人 javascript 模块添加类型注释,但我目前在尝试输入以正则表达式作为参数的函数时遇到困难,但以下尝试均无效:

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

我只是得到:

WARNING - Bad type annotation. Unknown type regexp

我应该在声明中使用什么类型?谢谢。

【问题讨论】:

  • 第一个注释@type {function(RegExp)} 应该可以工作。我在下面发布的示例都使用带有详细警告的Closure Compiler Service 进行了检查。
  • 听起来你缺少外部人员。你是如何运行编译器的?

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


【解决方案1】:

RegExp 对象被注释为外部es3.js 中的Closure Compiler。这是一个接受 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];
};

默认外部

闭包编译器包括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 APIexclude_default_externs=true

其他外部变量

contrib/externs 下还有其他可用的外部变量,默认情况下不包括在内。这些外部变量可以用--externs 标志指定。

【讨论】:

  • 谢谢,你的回答让我走上了正确的道路,我只需要添加一个 --externs es3.js 以获得更好的类型检查
【解决方案2】:

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

【讨论】:

  • 是的,我看到了这个页面,但我希望它只是没有记录:-/
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多