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 模块完成代码的主要内容,如果未能解决你的问题,请参考以下文章

将 JSDoc 与匿名对象和该对象的函数一起使用的正确方法

JSDoc:如何记录返回传递的构造函数实例的函数?

JSDoc Typescript声明:如何隐藏“私有”方法

如何使用 JSDoc 记录 ES6 类属性

用于接口属性的 TypeScript jsdoc

使用从 JSDoc 生成的类型声明:TS7016