返回的类实例的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等价于require
或import
地方: https : //github.com/Microsoft/TypeScript/issues/14377