@be_a_man

Можно как-то избавиться от дублирования?

/**
 * @param {Number} id
 * @param {String} name
 * @param {Number} age
 * @param {String} gender
 */
function userSchema({ id, name, age, gender } = {}) {
    return { id, name, age, gender }
}

const user = userSchema({ id: 123, gender: 'male' })
console.log(user)
// -> { id: 123, name: undefined, age: undefined, gender: 'male' }


Есть абстрактная схема. Просто хелпер функция, чтобы работала подсветка в IDE какие поля есть.
Как избавиться от повторного перечисления аргументов в return?
Полей в действительности намного больше, хотелось бы описать их 1 раз.
В идеале чтобы не переданный аргумент возвращался со значением null, а не undefined
Может какая-нибудь легкая библиотека?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Еще косяк в JSDoc'е. Так верно:
/**
 * @param {object} schema
 * @param {number} schema.id
 * @param {string} schema.name
 * @param {number} schema.age
 * @param {string} schema.gender
 */

Еще как вариант:
/**
 * @typedef UserSchema
 * @type {object}
 * @property {number|undefined} id
 * @property {string|undefined} name
 * @property {number|undefined} age
 * @property {string|undefined} gender
 */

/** @type {UserSchema} */
const defaultSchema = {
    id: undefined,
    name: undefined,
    age: undefined,
    gender: undefined
};

/**
 * @param {Object<string, any>} schema 
 * @returns {UserSchema}
 */
function userSchema(schema = {}) {
    return Object.assign({ ...defaultSchema }, schema);
}

Но такой подход не будет работать с вложенными объектами, данную задачу можно будет так решить.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы