【问题标题】:WebStorm JSDoc class declaration for code completion with node.js modulesWebStorm JSDoc 类声明,用于使用 node.js 模块完成代码
【发布时间】: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 类:stackoverflow.com/q/46504694

标签: javascript node.js webstorm jsdoc


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 2020-03-19
  • 2017-12-21
  • 2014-01-24
  • 2020-06-22
  • 2019-03-21
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多