Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Записи Продвинутый Typescript

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

type Context<K extends string, V> = {
  [Key in K]: V;
}

const runApp = <C extends Context<string, unknown>>(ctx: C) => {};

Ключ Key примет перебором все значения из K. В свою очередь, K является подмножеством string, а V может быть любым. Так мы создали свой тип Context со строковыми полями и неизвестным типом для значения.

Подобная конструкция, когда мы не задаем дополнительно никаких специфичных полей с динамическими ключами, встречается довольно часто. Встроенные Utility Types предоставляют для этого готовое решение — Record<Keys, Type>. Этот обобщенный тип принимает первым аргументом тип ключа, а вторым — тип значения. Внутри все устроенно схожим образом, как в нашем типе Context:

type Rating = 0 | 1 | 2 | 3 | 4 | 5;
type SongsRating = Record<string, Rating>;

const songsRating: SongsRating = {
  ratata: 4,
}

Таким типом SongsRating мы можем задать тип объекта с произвольным ключом (именем песни) и рейтингом — числом от нуля до пяти.

Использование Record является предпочтительным при описании объектных типов в TypeScript. Это позволяет гибко и лаконично описывать динамические структуры и использовать Record совместно с другими типами данных.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 9 мая
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 9 мая
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 9 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу