关于接口的关闭 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;
我正在使用闭包编译器,我有两个 类,我想断言它们的最小集合是 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;