@HiDiv
fullstack разработчик (php, js, html, css, vuejs)

Как реализовать обновление объекта на основании маппинга полей?

Я довольно давно пишу на js и всегда считал подобную задачу тривиальной, но на typescript не могу ее решить уже несколько дней.
Есть объект, свойства которого нужно обновить
const dest = {
  a2: 'a-empty',
  b2: 'b-empty',
  c2: 'c-empty'
}

Есть объект, из которого нужно взять новые значения
const source = {
  a1: 'a-new',
  c1: 'c-new'
}

Есть объект, который содержит значения по умолчанию (если их нет в source)
const defs = {
  a2: 'a-def',
  b2: 'b-def',
  c2: 'c-def'
}

И, наконец, есть объект, который задает маппинг полей
const map = {
  a2: 'a1',
  b2: 'b1',
  c2: 'c1'
}


Нужно обновить поля объекта desc значениями из объекта source по таблице map. Если в source нет нужного значения, то взять соответствующее из defs.

На js (как вариант!) я бы это сделал так
for (const toKey in dest) {
  const fromKey = map[toKey];
  dest[toKey] = typeof source[fromKey] === 'undefined' ? defs[toKey] : source[fromKey];
}


Пусть это не самый красивый или "идеологически правильный вариант", но это работает! Как сделать подобное на TypeScript понять не могу, т.к. постоянно получаю ошибки и замечания IDE и компилятора...
  • Вопрос задан
  • 243 просмотра
Решения вопроса 2
Kozack
@Kozack
Thinking about a11y
Ну, можно навелосипедить как-то вот так. Правда не уверен что нет варианта получше.
Ответ написан
WblCHA
@WblCHA
Интерфейсы. Нужны интерфейсы.
www.typescriptlang.org/play
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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