Зарегистрируйтесь, чтобы продолжить обучение

Модификаторы сопоставления типов Продвинутый Typescript

При сопоставлении типов можно менять атрибуты свойств такие как неизменность (immutability) и необязательность (optionality). Делается это с помощью соответствующих модификаторов: readonly и ?.

Чтобы добавить или удалить эти модификаторы, можно использовать префиксы + или -. Если не использовать префикс, то подразумевается что модификатор будет добавлен, то есть по умолчанию префикс +.

Примеры использования модификаторов есть в Utility Types:

/**
 * Делает все свойства типа `T` необязательными,
 * то есть добавляет атрибут `?`.
 */
type Partial<T> = {
  [P in keyof T]?: T[P];
};

/**
 * Делает все свойства типа `T` обязательными,
 * то есть удаляет атрибут `?`.
 */
type Required<T> = {
  [P in keyof T]-?: T[P];
};

/**
 * Делает все свойства типа `T` неизменяемыми,
 * то есть добавляет атрибут `readonly`.
 */
type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

Подобным образом можно написать и тип, который делает все свойства типа изменяемыми, то есть удаляет атрибут readonly:

type Mutable<T> = {
  -readonly [P in keyof T]: T[P];
};

Благодаря таким типам легче делать производные типы из уже имеющихся.

Например, в приложении может быть тип DefaultUser для не авторизованного пользователя у которого все поля необязательные:

type DefaultUser = {
  id?: string;
  firstName?: string;
  secondName?: string;
  email?: string;
};

Из него можно сделать авторизованного пользователя с помощью типа Required:

type AuthorizedUser = Required<DefaultUser>;

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

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

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

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря

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

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

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

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

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