【发布时间】:2015-01-10 17:05:34
【问题描述】:
我是JSDoc的新手,我正在尝试Webstorm,所以我对webstorm也很陌生。
一方面我有一个这样声明的接口:
/** @interface */
function IInterface(){}
IInterface.prototype.myMethod = function(){};
另一方面,我正在开发一个模块,我在其中实现了这个接口:
window.exports.MyImplementation = (function(){
"use strict";
/**
*
* @constructor
* @implements {IInterface}
*/
function MyImplementation(){}
MyImplementation.prototype.myMethod = function(){
// my implementation here
};
return MyImplementation;
})();
我遇到的问题是显然无法识别该实现:
但如果我删除了 window.exports.MyImplementation 赋值或 return 语句,就不会再有警告...
.. 但我确实想从我的模块中返回并存储我的类型!
我有什么遗漏或做错了吗?...
编辑:
只是为了给我的问题带来更多的困惑, 我正在考虑使用“完整注释”接口声明(如果可能的话,我正在这里尝试......):
...但是在这种情况下,您会注意到“I”符号从左侧消失了,如果该方法没有实现,我没有任何警告。 但是可以识别 IInterface 类型。
编辑: 我想我只是在尝试 jsDoc 的其他东西时理解了一些东西。 引发警告是因为对 window.exports.MyImplementation 的实现进行了检查。但是在代码中没有实现这个对象的直接赋值。 这就是为什么当我删除 return 语句或“exports.MyImplementation”分配时警告被禁用的原因。
.. 因此,不确定这是否可以被视为错误,这可能是我用于模块的模式与 WebStorm 预期的模式不匹配,也可能与 JSdoc 本身预期的模式不匹配..... . 如果有 JSDoc 和 Webstorm 经验的人可以确认.....
另一个修改: (我认为这是理解 JSDoc 的重要一步)
注释已被移动到目标字段上,并且... tadaaa(注意“I”仍然在这里,表明接口确实正在实现)。
我的解释: 这背后可能有一个逻辑......但老实说,我真的不知道它是否相关:因为记录的字段将在最后导出到“exports.MyImplementation”中,这很明显注释更多在这里比在私人围场有用。 WebStorm 已检测到导出到“exports.MyImplementation”,因此正在等待相关文档...
有意义吗?...
还有另一个编辑(再次) 调查,调查。
我找到了一个完全不同的解决方案,它允许记录、完成、验证并且没有警告,这在我看来是一个更好的模块导出解决方案:
【问题讨论】:
-
我猜是因为您对
MyImplementation的声明在技术上已在第 66 行“完成”,而没有实现接口的所有必要功能。我想您必须将方法实现集成到MyImplementation的声明中,而不是稍后将其添加到原型中。 -
感谢您的建议 kasoban,但正文中的实施并没有改变任何东西。此外,我真的很想使用原型来实现它。理想情况下,如果有一个解决方案可以更改注释,它将完全符合需求:-)
-
嗯,据我了解的文档,您的代码应该没问题,除了第 66 行和第 55 行末尾缺少分号。也许这会让检查员感到困惑?
-
再次感谢 kasoban ...但是,据我所知,在 javascript 中“提升”,在我看来,在这些情况下不应该有分号 :-)。无论如何,添加分号仍然不会改变任何东西:-(
-
是的,你不一定需要分号,但它们也不会造成伤害。只是一个疯狂的猜测:)
标签: javascript webstorm jsdoc