9

私は現在、個人のjavascriptモジュールに型注釈を追加していますが、正規表現をパラメーターとして関数を入力しようとすると、現在スタックしていますが、次の試行はどれも機能していません:

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

私は取得しているだけです:

WARNING - Bad type annotation. Unknown type regexp

宣言ではどのタイプを使用する必要がありますか?ありがとう。

4

2 に答える 2

11

このRegExpオブジェクトは、extern 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];
};

デフォルトの外部

Closure Compiler には、es3.js、es5.js、es6.js などの デフォルトの extern が含まれています。これらの externs ファイルは、通常、次のフラグが設定されていない限り、明示的に指定する必要はありません。

クロージャ コンパイラ アプリケーション:--use_only_custom_externs=true

Closure Compiler Service UI :@exclude_default_externs true

クロージャ コンパイラ サービス API :exclude_default_externs=true

追加の外部

デフォルトでは含まれていないcontrib/externsの下に利用可能な追加の externs があります。これらの extern は--externsフラグで指定できます。

于 2012-06-01T18:06:54.723 に答える
0

GCCのタイプのリストによると、JSDocには個別の正規表現タイプはなく、正規表現自体には「オブジェクト」タイプがあります。@typedef注釈をより読みやすく意味のあるものにしたい場合は、「regexp」を「object」にエイリアスするために使用できます。また、このタイプが実際に追加された場合、将来的に迅速に適応できるようになります。エイリアスを削除または変更するだけで済みます。

于 2012-06-01T16:08:00.163 に答える