返回的类实例的JSDoctypes

我使用Node.js有两个模块和一个依赖于它们的脚本:

LIB / Bar.js

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

LIB / Foo.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代码使用IntelliSense为用户提供有关Foo和Bar属性的build议,这些属性在checkFoo方法内正确工作,因为foo的types被声明为Foo对象,并且foo.someBar的types在Foo类中声明作为一个Bar对象。

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

你的怀疑是正确的。 目前,您还需要导入Bar以在jsdoc中使用其types:

 const Foo = require('./lib/Foo.js'); const Bar = require('./lib/Bar.js'); ... /** * @param {Bar} bar a Bar instance */ function checkBar(bar) { ... } 

我们正在跟踪支持JSDoc等价于requireimport地方: https : //github.com/Microsoft/TypeScript/issues/14377