Как заставить автозаполнение JSDoc работать для функции, возвращаемой другой функцией с распределенными аргументами? - PullRequest
1 голос
/ 21 мая 2019

Я централизирую пользовательские шаблоны строк сообщений в Node API, который я пишу, чтобы все мои строки жили вместе.Я хотел бы иметь возможность динамически создавать эти строки из других частей кода, передавая функции шаблона аргументы, необходимые для построения сообщения, но проблема в том, что я не могу понять, как структурировать JSDoc для выполнения автозаполнения дляобъект, который был передан моим "строителям строк", также функции, возвращаемые с template ниже.Ниже приведен пример того, как это будет выглядеть в идеале.В большинстве случаев вы можете игнорировать реализацию функции template, так как она взята из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates.

// strings.js

// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates
function template(strings, ...keys) {
  return function(...values) {
    var dict = values[values.length - 1] || {};
    var result = [strings[0]];
    keys.forEach(function(key, i) {
      var value = Number.isInteger(key) ? values[key] : dict[key];
      result.push(value, strings[i + 1]);
    });
    return result.join('');
  };
}

/**
 * Returns a string for welcoming mentees to the platform.
 * @param {object} params
 * @param {string} params.name The name of the mentee.
 */
export const menteeOnboardingWelcome = template`Hi ${'name'}, welcome!`;

/**
 * Returns a string for when a mentee and mentor are matched.
 * @param {object} params
 * @param {string} params.menteeName The name of the mentee.
 * @param {string} params.mentorName The name of the mentor.
 */
export const menteeMentorMatched = template`${'menteeName'} and ${'mentorName'} have been matched!`;

console.log(menteeMentorMatched({ menteeName: 'Jack', mentorName: 'Jill' }));

При вводе этой последней строки я бы хотел, чтобы автозаполнение (в VSCode, если это полезно) было перечисленоmenteeName и mentorName плюс связанная с ними документация, но поскольку template возвращает функцию, которая принимает ...values, это то, что она показывает вместо этого.Как я могу структурировать свой JSDoc так, чтобы он показывал то, что я хочу вместо ...values?

Снимок экрана

Другой вариант, конечно, заключается в простом переносе функций построителя строк.в оболочке функции для документации:

export const menteeMentorMatched = ({ menteeName, mentorName }) => `...`

Я подозреваю, что это единственный способ заставить JSDoc работать в этом случае.Хотя это было бы не так уж и плохо, но немного более многословно, чем мне бы хотелось, поскольку в этом файле я бы хотел избежать как можно большего количества наворотов.

...