2016-02-15 55 views
2

我想知道如何正确使用JSDoc在WebStorm 11,以纪念类和类型的Node.js应用程式,以获取代码完成等WebStorm JSDoc类声明的代码完成与Node.js的模块

例如:

文件答:

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 

现在我倒是升ike要为“foo”完成代码完成,所以它建议foo.b,foo.doSth,...

我尝试了很多像@class,@constructor这样的JSDoc条目,并使用@type {A}以便将foo定义的类型一样

/* @type {A} */ 
var foo = bar(); 

但WebStorm不识别的类型A.它没有代码完成,也按Ctrl +点击括号中的A型说“找不到声明去”。

任何想法如何正确地做到这一点?

+0

交换您需要使用@module标签并使用module:namepath引用您的模块。请参阅http://usejsdoc.org/howto-commonjs-modules.html – lena

+0

谢谢@lena!这让我更接近,但还是不完全,我想,也许我误解的东西: 使用 '/ ** * 测试@module /数据/ A */ module.exports =新的A();' 它没有按预期工作。但是,当我添加 '@alias模块:test/data/A.doSth' 在添加到A原型的每个单个函数之前,它的工作是完成代码。但我想避免这种情况。有没有办法让它自动检测? – Ralf

+0

也看到这个相关的问题,但对于ES6类:https://stackoverflow.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

+0

如果可以,我建议升级到一个新的Node.js版本支持ES6。请参阅此处的示例:https://stackoverflow.com/q/46504694 –