使用Google的闭包编译器在函数对象上还具有属性的构造函数的正确类型是什么?
这是Closure compiler debugger上可运行的首次尝试。
申请代码
const Mocha = /** @type {!MochaJS} */ (require('mocha'));
const mochaInstance = new Mocha();
const Suite = Mocha.Suite;
关闭外部
/** @constructor */
const MochaJS = function() {};
/** @type {!MochaJS.Suite} */
MochaJS.prototype.Suite;
/** @record */
MochaJS.Suite = function() {};
答案 0 :(得分:1)
困难之所以出现,是因为Closure-compiler不能很好地处理外部模块定义。另外,不要将构造函数/命名空间与实例混淆。他们是不同的。
<强>应用强>
// A constructor type for Mocha
const Mocha = /** @type {!function(new:MochaJS)} */ (require('mocha'));
const mochaInstance = new Mocha();
const Suite = /** @type {!MochaJSSuite} */ (Mocha.Suite);
<强>实习医生强>
/** @constructor */
const MochaJS = function() {};
/** @function */
MochaJSSuite = function() {};
这只是对类型的粗略猜测 - 我不熟悉Mocha编写externs而不去寻找文档参考。希望它会指出你正确的方向。