Я централизирую пользовательские шаблоны строк сообщений в 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 работать в этом случае.Хотя это было бы не так уж и плохо, но немного более многословно, чем мне бы хотелось, поскольку в этом файле я бы хотел избежать как можно большего количества наворотов.