2017-08-04 109 views
2

我使用Node.js的两个模块和一个脚本,取决于他们:JSDoc类型返回类实例

的lib/Bar.js

module.exports = class Bar { 
    // .. 
}; 

的lib /美孚。 JS

const Bar = require('./Bar.js'); 

module.exports = class Foo { 
    /** 
    * @return {Bar} A Bar instance 
    */ 
    get someBar() { 
    return new Bar(); 
    } 
}; 

main.js

const Foo = require('./lib/Foo.js'); 

checkFoo(new Foo()); 

/** 
* @param {Foo} foo A Foo instance 
*/ 
function checkFoo(foo) { 
    foo. // I get suggestions for Foo properties 
    foo.someBar. // I get suggestions for Bar properties 

    checkBar(foo.someBar); 
} 

/** 
* @param {Bar} bar a Bar instance 
*/ 
function checkBar(bar) { 
    bar. // I get no suggestions! 
} 

我的代码编辑器Visual Studio代码使用智能感知提供有关Foo和Bar性能,这为foo类型被声明为Foo对象checkFoo方法内正常工作的用户的建议,并foo.someBar的类型声明在Foo类中作为Bar对象。

但是,只要我将此Bar实例传递给另一个方法(checkBar),Bar类型就不会被识别(可能是因为我不需要该模块)。 在JSDoc中是否有一个特殊的语法来指定一个类型在另一个模块中声明?或者这只是VSCode的问题?

+0

这是否帮助HTTP:// usejsdoc。 org/tags-typedef.html? – Lazyexpert

+0

@Lazyexpert不幸的是,没有。 Bar中的所有属性都记录在有效的JSDoc注释中,并且在'checkFoo'方法中显示的建议中,该引用确实有效。我只想知道如何获得'checkBar'中的建议。 –

回答

2

您的怀疑是正确的。目前,您还需要导入Bar在jsdoc使用它的类型:

const Foo = require('./lib/Foo.js'); 
const Bar = require('./lib/Bar.js'); 

... 

/** 
* @param {Bar} bar a Bar instance 
*/ 
function checkBar(bar) { 
    ... 
} 

我们正在跟踪支持A JSDoc相当于requireimport这里:https://github.com/Microsoft/TypeScript/issues/14377