BACK
Уроки14. map: DTO в ViewModel
Уроки · 14

14. map: DTO в ViewModel

Реальный кейс: DTO → ViewModel

В Angular-приложениях данные с сервера обычно приходят в одной форме (это называют DTO — Data Transfer Object), а компоненту удобнее работать с другой (это часто называют ViewModel). map — стандартный инструмент для такого преобразования.

Правило чистой трансформации

map должен быть чистой функцией: получил значение → вернул новое значение. Никаких console.log, изменений внешних переменных, отправки аналитики и т.п. Если нужны побочные эффекты — для них есть отдельный оператор tap, мы изучим его позже.

Глоссарий

  • DTO — структура данных, которую отдаёт сервер.
  • ViewModel — структура, удобная для отображения в UI (готовые строки, флаги, классы).
  • Чистая функция — функция без побочных эффектов: одинаковый вход всегда даёт одинаковый выход, и она ничего не меняет вокруг себя.

Что нужно сделать

  1. Внутри pipe(...) добавьте map(user => 'User #' + user.id + ': ' + user.name).
  2. Каждый объект пользователя превратится в готовую строку.
  3. Ожидаемый вывод:
    User #1: Ada
    User #2: Linus
Решение spoiler · click to reveal
const { from, map } = Rx;

const users = [
  { id: 1, name: 'Ada' },
  { id: 2, name: 'Linus' }
];

const labels$ = from(users).pipe(
  map(user => 'User #' + user.id + ': ' + user.name)
);

labels$.subscribe(label => console.log(label));
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...