コンストラクタ関数のインスタンスではなく、Googleクロージャコンパイラを使用して複雑な関数型を参照するにはどうすればよいですか? クローズコンパイラexterns - 複雑な関数の参照
foo.jsは
/** @externs */
/** @const */
const CoolLibrary = {};
/**
* @param {!Object} object The object to inspect.
* @param {!Object} source The object of property values to match.
* @param {!function(!Object): !Object} customizer The function to customize
* comparisons.
* @return {boolean} Returns `true` if `object` is a match, else `false`.
* @constructor
*/
CoolLibrary.matchSomething = function(object, source, customizer) {};
/**
* @param {string} src
* @return {!Object}
*/
function require(src) {}
CoolLibrary.matchSomethingのための外部宣言 - -
externs.js私はそうのようにそれを呼び出すよ、アプリケーション・コード
goog.module('foo');
const isMatchWith = /** @type {!CoolLibrary.matchSomething} */ (require('coollibrary.matchsomething'));
const foo = isMatchWith({}, {}, (val) => {});
:
java -jar closure-compiler-v20161201.jar --js=foo.js --externs=externs.js --new_type_inf
ここで ' Closure Compiler Debugger
このエラーで実行可能なバージョン(S)
foo.js:3: WARNING - Bad type annotation. Unknown type Lodash.isMatchWith
const isMatchWith = /** @type {!Lodash.isMatchWith} */ (require('lodash.ismatchwith'));
^
0 error(s), 1 warning(s), 72.7% typed
私は@typedef
を使用する場合、それは動作しますが、それは情報のほとんどを失います。以下のようなtypedefを使うよりも、型情報を追加する良い方法はありますか?
/** @typedef {function(!Object, !Object, function(!Object):!Object):boolean} */
CoolLibrary.matchSomething;