0Pricing
TypeScript Academy · Урок

Модификаторы в отображаемых типах: readonly и ?

Добавляйте и удаляйте модификаторы с помощью +/- в отображаемых типах

«Модификаторы в отображаемых типах: readonly и ?» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Отображаемые типы могут добавлять или удалять модификаторы `readonly` и optional (`?`) у свойств с помощью префиксов `+` и `-`.

Добавление модификаторов с помощью +

Префикс `+` (используемый неявно по умолчанию) добавляет модификатор к каждому свойству в отображаемом типе.
type Readonly<T> = { +readonly [K in keyof T]: T[K] }; // + is implicit
type Optional<T> = { [K in keyof T]+?: T[K] };

Удаление readonly с помощью -

Используйте `-readonly`, чтобы убрать модификатор readonly у свойств.
type Mutable<T> = { -readonly [K in keyof T]: T[K] };
const mutableUser: Mutable<Readonly<User>> = { id: 1, name: 'Alice' };
mutableUser.id = 2; // OK now

Удаление ? с помощью -

Используйте `-?`, чтобы удалить модификатор optional и сделать все свойства обязательными.
type Required<T> = { [K in keyof T]-?: T[K] };
// Now all optional properties become required

Объединение - и -?

Можно объединить оба удаления, чтобы создать изменяемую версию типа со всеми обязательными свойствами.
type Concrete<T> = { -readonly [K in keyof T]-?: T[K] };

Partial и Required — противоположности

Partial добавляет `?` с помощью +?. Required удаляет его с помощью -?.
// From TypeScript lib:
type Partial<T> = { [K in keyof T]?: T[K] };   // adds ?
type Required<T> = { [K in keyof T]-?: T[K] };  // removes ?

Сохранение модификаторов по умолчанию

Без явных + или - отображаемые типы сохраняют существующие модификаторы исходного типа.
interface User { readonly id: number; name?: string; }
type Copy<T> = { [K in keyof T]: T[K] };
type C = Copy<User>; // readonly id preserved, name? preserved

Практическое применение: тип Patch

Создайте тип Patch, который делает все свойства необязательными и одновременно убирает readonly для обновлений.
type Patch<T> = { -readonly [K in keyof T]?: T[K] };

DeepReadonly

Применяйте readonly рекурсивно с помощью условного типа внутри отображаемого типа.
type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K]
};

DeepPartial

Аналогичным образом применяйте ? рекурсивно, чтобы получить тип с глубоко вложенными необязательными свойствами.
type DeepPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
};

Таблица сочетаний модификаторов

+readonly = добавить readonly. -readonly = удалить readonly. +? = добавить optional. -? = удалить optional. Все четыре модификатора можно сочетать.

Быстрая проверка

Что создаёт `{ [K in keyof T]-?: T[K] }`?

Итоги

Используйте префиксы +/- перед readonly и ? в отображаемых типах, чтобы явно добавлять или удалять эти модификаторы. -? реализует Required, а -readonly — Mutable. Сочетайте оба префикса для полного управления изменяемостью.

Часто задаваемые вопросы

Урок «Модификаторы в отображаемых типах: readonly и ?» бесплатный?

Да — полный текст урока «Модификаторы в отображаемых типах: readonly и ?» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Модификаторы в отображаемых типах: readonly и ?»?

Добавляйте и удаляйте модификаторы с помощью +/- в отображаемых типах Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Модификаторы в отображаемых типах: readonly и ?»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Отображаемые типы: преобразование типов объектов
  2. Модификаторы в отображаемых типах: readonly и ?
  3. Типы шаблонных литералов: шаблоны строк
  4. Переименование ключей с помощью as в отображаемых типах
← Назад к TypeScript Academy