Вложенные объекты

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Вложенные объекты в TypeScript — это объекты, которые содержат другие объекты в качестве своих свойств. Это базовый способ организации сложных структур данных.

При типизации вложенных объектов нужно описать структуру на каждом уровне:

const user: { name: string; address: { city: string; zip: number } } = { ... };

Обращение к вложенным свойствам происходит через цепочку точек: user.address.city. TypeScript проверяет корректность обращения на каждом уровне вложенности.

  • Можно использовать отдельные типы или интерфейсы для вложенных объектов
  • Глубина вложенности не ограничена, но влияет на читаемость

В этом интерактивном тренажёре ты потренируешься создавать и типизировать вложенные объекты на практических примерах.

Список тем

1. Типизация вложенного объекта

id: 40649_nested_01_replace

Проанализируйте приведенный код. В нем объявлен тип UserProfile, который содержит вложенный объект location. Ниже создается переменная userData этого типа, где вложенным свойствам присваиваются конкретные значения. Заполните пропуски в определении типа, указав корректные примитивные типы данных (string или number), соответствующие значениям в переменной.

Заполните пропуски
type UserProfile = {
    name: string;
    location: {
        city: input1S;
        postalCode: input2S;
    }
};

const userData: UserProfile = {
    name: "Marina",
    location: {
        city: "Minsk",
        postalCode: 220000
    }
};
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Ошибка в обращении к свойству

id: 40649_nested_02_error

В приведённом фрагменте кода TypeScript определён объект пользователя с вложенным объектом адреса. При выводе в консоль допущена опечатка в имени свойства. Найдите и исправьте ошибку, чтобы в консоль вывелось название города.

Найдите ошибку и исправьте
const user = {
  name: "John",
  age: 30,
  address: { city: "New York", street: "Broadway" }
};
console.log(user.address.citi);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Собери вложенный объект

id: 40649_nested_03_build

Из предложенных строк соберите корректное объявление типа для вложенного объекта на TypeScript. Тип для объекта `person` должен содержать свойства `name` (строка), `age` (число) и вложенный объект `address` с полями `city` и `street` (оба строки). Игнорируйте лишние строки, не относящиеся к объявлению этого типа.

Перетяните в правильном порядке строки из одного блока в другой
const person: {
  name: string;
  age: number;
  address: {
    city: string;
    street: string;
  } };
  phone: string;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Что вернёт обращение?

id: 40649_nested_04_predict

Проанализируйте код на TypeScript, содержащий объект с двумя уровнями вложенности. Обратите внимание на структуру объекта и путь к свойству, указанный в console.log. Выберите результат, который будет выведен в консоль.

Выберите правильный вариант ответа
const company = {
  name: 'TechCorp',
  address: {
    city: 'Moscow',
    street: 'Lenina',
    building: {
      number: 10,
      entrance: 2
    }
  },
  employees: 150
};

console.log(company.address.building.entrance);
Сообщения
Проверить
Показать подсказку

5. Напиши значение свойства

id: 40649_nested_05_give

В приведённом фрагменте кода TypeScript определён объект library, содержащий вложенные объекты и массивы. Проанализируйте структуру объекта и определите, какое значение будет получено при обращении к свойству library.sections.fiction.books[1].author. Введите это значение в поле ответа в виде одной строки без кавычек.

Что должно получиться?
let library = {
  name: "City Library",
  sections: {
    fiction: {
      books: [
        { title: "The Great Gatsby", author: "F. Scott Fitzgerald", year: 1925 },
        { title: "To Kill a Mockingbird", author: "Harper Lee", year: 1960 }
      ],
      librarian: "John Doe"
    },
    nonFiction: {
      books: [
        { title: "Sapiens", author: "Yuval Noah Harari", year: 2011 }
      ],
      librarian: "Jane Smith"
    }
  }
};

// Чему равно значение library.sections.fiction.books[1].author ?
Сообщения
Проверить
Показать подсказку

6. Найди вложенные объекты

id: 40649_nested_06_click

Внимательно изучите код на TypeScript. В нём объявлен объект user с различными свойствами. Ваша задача — отметить только те свойства, значениями которых являются объекты (вложенные объекты). Не отмечайте свойства с примитивными значениями (строка, число, булево) и массивами.

Кликните по всем фрагментам, которые подходят под условие задания.
const user = {
    {{name~|~t1}}: "Alice",
    {{age~|~t2}}: 30,
    {{isActive~|~t3}}: true,
    {{hobbies~|~t4}}: ["reading", "coding"],
    {{address~|~t5}}: {
        street: "123 Main St",
        city: "Wonderland"
    },
    {{education~|~t6}}: {
        degree: "Bachelor",
        year: 2015
    },
    {{work~|~t7}}: {
        company: "Tech Corp",
        position: "Developer"
    },
    {{scores~|~t8}}: [95, 87, 92]
};
Сообщения
Проверить
Показать подсказку

7. Выбери типы для структуры

id: 40649_nested_07_select

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

Нужно правильно расставить в пропуски предложенные варианты
type Book = {
  title: input1S;
  year: input2S;
  author: input3S;
};
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

8. Разметь части объявления

id: 40649_nested_08_highlight

Разметьте объявление вложенного объекта в TypeScript. Укажите для каждого выделенного фрагмента, является ли он именем переменной, типом внешнего объекта, именем вложенного свойства, типом вложенного объекта или значением переменной. Обратите внимание, что типы могут быть заданы через псевдонимы (type alias), а значение — это литерал объекта, присваиваемый переменной.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
type Inner = { b: number };
type Outer = { {{a~|~t3}}: {{Inner~|~t4}} };
const {{o~|~t1}}: {{Outer~|~t2}} = {{ { a: { b: 1 } }~|~t5 }};
Значение
Имя переменной
Имя вложенного свойства
Тип внешнего объекта
Тип вложенного объекта
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40649_compiler

Демонстрация вложенных объектов в TypeScript на примере профиля пользователя: объект содержит адрес и настройки, а вы читаете и обновляете данные по цепочке свойств. Экспериментируйте: меняйте город, добавляйте новые поля в address/settings, пробуйте делать часть вложенных данных необязательной и смотрите, как TypeScript подсказывает ошибки. В коде есть и безопасный вариант обновления, и намеренно неверные строки (закомментированы) — раскомментируйте их, чтобы увидеть, что именно сломается. Попробуйте написать свою функцию, которая, например, переключает тему или увеличивает номер дома, и проверьте типы.

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру