WebStorm JSDoc 类声明,用于使用 node.js 模块完成代码
Posted
技术标签:
【中文标题】WebStorm JSDoc 类声明,用于使用 node.js 模块完成代码【英文标题】:WebStorm JSDoc class declaration for code completion with node.js modules 【发布时间】:2016-05-26 20:08:41 【问题描述】:我想知道如何在 WebStorm 11 中正确使用 JSDoc 来标记 node.js 应用程序中的类和类型以获取代码完成等。
例子:
文件 A:
function A()
this.b = true;
A.prototype.doSth = function doSth()
return !this.b;
module.export = new A();
文件 B:
var foo = bar(); // returns type of A
现在我想为“foo.”进行代码完成,以便它建议 foo.b、foo.doSth、...
我尝试了很多 JSDoc 条目,如 @class、@constructor 并使用 @type A 来定义 foo 之类的类型
/* @type A */
var foo = bar();
但 WebStorm 无法识别类型 A。它没有代码完成,并且 Ctrl+单击括号中的类型 A 会显示“找不到要转到的声明”。
知道如何正确执行此操作吗?
【问题讨论】:
您需要使用@module 标签并使用module:namepath 引用您的模块。见usejsdoc.org/howto-commonjs-modules.html 谢谢@lena!这让我更接近了,但仍然不是我想要的,也许我误解了一些东西:使用/** * @module test/data/A */ module.exports = new A();
它没有按预期工作。但是当我添加`@alias module:test/data/A.doSth`在添加到A原型的每个函数前面时,它可以完成代码。但我想避免这种情况。有没有办法让它自动检测到这一点?
也看到这个相关的问题,但是对于 ES6 类:***.com/q/46504694
【参考方案1】:
似乎我找到了解决方案。问题只是我用来标记变量类型的语法:
/**
* @class
*/
function A()
this.b = true;
A.prototype.doSth = function doSth()
return !this.b;
module.export = new A();
适用于
/**
* @type A
*/
var foo = bar();
注意注释语法的不同: 以前我尝试过使用
/* @type A */
var foo = bar();
这不起作用。 @class
也可以换成@constructor
【讨论】:
如果可以的话,我建议升级到支持 ES6 的更新的 Node.js 版本。示例见此处:***.com/q/46504694以上是关于WebStorm JSDoc 类声明,用于使用 node.js 模块完成代码的主要内容,如果未能解决你的问题,请参考以下文章