Вот пример того, что я пытаюсь сделать.
Просто интересно, есть ли какой-нибудь способ добиться того, чтобы метод moo
, на который ссылаются в других местах кода VS, заполнял intellisense с помощью jsdoc. Прямо сейчас это просто видно any
.
библиотека/newmoment.js
/**
* @module lib/newmoment
*/
const moment = require('moment');
/**
* do the moo
* @returns {String} moo
*/
moment.moo = function(){
return 'moo'
}
module.exports = moment;
test.js, который использует lib/newmoment.js
const moment_modified = require('./lib/newmoment')
console.info(moment_modified.moo());
Скриншоты, показывающие any
, однако я пытаюсь заставить интеллект показать do the moo
:
оригинальная функция
Я нашел способ взломать то, что искал, без типа пересечения, используя JSdoc (ваш опыт может отличаться). Скриншоты с результатами ниже. Это, конечно, не самый чистый вариант, но, по крайней мере, он может помочь вам, пока у вас не появится возможность рефакторить код (см. предложения @adsy).
обновленный lib/newmoment.js
/**
* @namespace NewMoment
*/
const NewMoment = {
/**
* do the moo
* @returns {String} moo
*/
moo(){}
}
/**
* @type {NewMoment}
*/
const moment = require('moment');
moment.moo = function(){
return 'moo'
}
module.exports = moment;
test.js остается таким же, как и раньше
в lib/newmoment.js показывает jsdoc
🤔 А знаете ли вы, что...
Синтаксис JavaScript схож с синтаксисом языка программирования Java, но они не связаны.
Самый простой способ — использовать тип пересечения (&
) исходного и нового типов. Object.assign
уже подразумевает это, а также требует передачи литерала объекта для этого «нового типа».
В свою очередь, объектные литералы легко разметить с помощью дальнейшего JSDoc.
/**
* @module lib/newmoment
*/
const moment = require('moment');
module.exports = Object.assign(moment, {
/**
* do the moo
* @returns {String} moo
*/
moo() {
return 'moo';
}
});
Обратите внимание, что и этот, и ваш исходный пример фактически изменяют исходный модуль, что не является хорошей практикой. Вы можете использовать Object.assign({}, moment, { // ...etc
.