Я использую 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 Code использует IntelliSense, чтобы дать пользователю предложения о свойствах Foo и Bar, которые правильно работают внутри метода checkFoo
, поскольку тип foo
объявлен как объект Foo
, а тип foo.someBar
объявлен в классе Foo
как объект. Bar
объект.
Но как только я передаю этот экземпляр Bar
другому методу (checkBar
), тип Bar
не распознается (вероятно, потому что мне не нужен модуль). Есть ли в JSDoc специальный синтаксис для указания типа, объявленного в другом модуле? Или это просто проблема с VSCode?
checkFoo
, ссылка действительно работает. Мне только интересно, как заставить предложения работать вcheckBar
. - person Felix Edelmann   schedule 04.08.2017