Tipo JSDoc para instancias de clase devueltas

Estoy usando Node.js con dos módulos y un script que depende de ellos:

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! } 

El editor de mi código Visual Studio utiliza IntelliSense para dar sugerencias al usuario sobre las propiedades de Foo y Bar, que funciona correctamente dentro del método checkFoo , ya que el tipo de foo se declara como objeto de Foo y el tipo de foo.someBar se declara en la clase de Foo como un objeto Bar .

Pero tan pronto como paso esta instancia de Bar a otro método ( checkBar ), no se reconoce el tipo de Bar (probablemente porque no necesito el módulo). ¿Hay una syntax especial en JSDoc para especificar un tipo como declarado en otro módulo? ¿O es esto solo un problema con VSCode?

Tu sospecha es correcta. Actualmente, también necesita importar Bar para usar su tipo en el jsdoc:

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

Estamos siguiendo el soporte para un equivalente de JSDoc de require o import aquí: https://github.com/Microsoft/TypeScript/issues/14377

Intereting Posts