关于接口的关闭 linter 警告

Closure linter warning about interfaces

我正在使用闭包编译器,我有两个 类,我想断言它们的最小集合是 methods/properties。为此,我创建了一个界面...例如:

goog.scope(function() {



/**
 * @interface
 */
namespace.Foo = function() {};
var Foo = namespace.Foo


/**
 * @return {string}
 */
Foo.prototype.bar = function() {};

});  // goog.scope

问题是 Foo.prototype.bar 没有 return 语句,所以闭包 linter 会抱怨,即使闭包本身是完全快乐的。

Line 38, E:0218: Found @return JsDoc on function that returns nothing
Line 56, E:0218: Found @return JsDoc on function that returns nothing

当然,如果我删除 @return 注释,那么闭包会很不愉快,并会抛出有关重写方法和返回与接口不兼容的内容的警告。我不想禁用此警告,因为这几乎就是我首先编写接口的原因(以确保所有实现者都在做他们需要做的事情)。

是否有任何魔法咒语可以用来在这个文件的闭包 linter 中禁用该警告?

您可以尝试 @abstract tag, this may help. If not, closure complier can suppress 警告。我认为这样的事情会奏效。

/**
 * @return {string}
 * @suppress {missingReturn}
 */
 Foo.prototype.bar = function() {};

祝你好运!

事实证明,答案只是在闭包 linter 中等待被发现 source code/test cases:

他们这样写:

/**
 * Sample interface to demonstrate correct style.
 * @interface
 */
sample.GoodInterface = function() {
};


/**
 * Legal methods can take parameters and have a return type.
 * @param {string} param1 First parameter.
 * @param {Object} param2 Second parameter.
 * @return {number} Some return value.
 */
sample.GoodInterface.prototype.legalMethod = function(param1, param2) {
};

这在他们的测试用例中显然很好。这和我的有什么不同?好吧,他们没有使用 goog.scope 来做任何别名。当我删除别名时(例如

/**
 * @return {string}
 */
namespace.Foo.prototype.bar = function() {};

closure-linter 现在足够聪明,可以弄清楚 Foo 是接口的一部分,它不需要在方法中进行任何实现。厉害了。

尝试以下操作:

/**
 * @return {string}
 */
namespace.Foo.prototype.bar;

接口根本不需要任何函数体。我怀疑它们只对编译器可见,甚至根本不会出现在您的代码中。

或者,因为您使用的是 goog.scope,您可以这样写:

/**
 * @return {string}
 */
Foo.prototype.bar;