JSDoc: @type для вложенной функции

#javascript #intellij-idea #jsdoc

#javascript #intellij-идея #jsdoc

Вопрос:

У меня есть factory функция, которая определяет и возвращает другую функцию — myFunc . Я хочу документировать свои рабочие переменные с помощью JSDoc:

 function factory() {
    function myFunc(param) {
        console.log(`Hello ${param}!`);
    }

    return myFunc;
}

/** @type {factory} */
const fact = factory;
/** @type {???} */
const fn = fact();
fn('world');
 

Я могу документировать factory функцию:

 /** @type {factory} */
const fact = factory;
 

но моя IDE (IDEA PhpStorm) не может разрешить внутреннюю функцию таким же образом:

 /** @type {myFunc} */
const fn = factory();
 

В этом случае я не могу использовать навигацию по Ctrl click. Существует ли какой-либо метод для решения внутренней функции? Что-то. Нравится factory#myFunc :

 /** @type {factory#myFunc} */
const fn = factory();
 

Ответ №1:

Это возможно с помощью @exports директивы для вложенной функции:

 function factory() {
    /** @exports myFunc */
    function myFunc(param) {
        console.log(`Hello ${param}!`);
    }
    return myFunc;
}

/** @type {factory} */
const fact = factory;
/** @type {myFunc} */
const fn = fact();
fn('world');
 

Ответ №2:

Ваша factory возвращает функцию, которая принимает строку и ничего не возвращает.

Это может быть выражено с помощью выражения типа с использованием @return тега:

 /** @return {function(string): void} */
function factory() {
  function myFunc(param) {
    console.log(`Hello ${param}!`);
  }
  return myFunc;
}
 

Если x присвоен результат factory() , ваша среда разработки должна иметь возможность определить его тип:

введите описание изображения здесь

Комментарии:

1. В этом случае моя среда разработки PhpStorm не может перемещаться с myFunc помощью «Ctrl Click»: (Моя первая цель — навигация по коду, а не просто определение возвращаемых значений с помощью JSDoc. В любом случае спасибо за ваш ответ 🙂