TypeScript Academy · Урок

Partial и Required: переключение обязательности

Одновременно делайте все свойства необязательными или обязательными

Урок 1 из 413 шагов

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

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

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

Partial<T>

Partial делает каждое свойство T необязательным. Это полезно для операций обновления и частичного исправления, когда доступны не все поля.
interface User { id: number; name: string; email: string; }
type PartialUser = Partial<User>;
// { id?: number; name?: string; email?: string; }

Partial в функциях обновления

Используйте Partial при реализации функций обновления и объединения, которые принимают только изменённые поля.
function updateUser(id: number, changes: Partial<User>): User {
  const existing = findUser(id)!;
  return { ...existing, ...changes };
}

Required<T>

Required удаляет все модификаторы необязательности, делая каждое свойство обязательным.
type RequiredUser = Required<User>;
// All properties are now required — including those that were optional

Required для проверки конфигурации

Используйте Required после объединения со значениями по умолчанию, чтобы убедиться в наличии всех значений конфигурации.
interface Config { host?: string; port?: number; }
const defaults: Required<Config> = { host: 'localhost', port: 3000 };
function createConfig(opts: Config): Required<Config> {
  return { ...defaults, ...opts };
}

Как реализован Partial

Partial использует отображаемый тип с модификатором +?.
type Partial<T> = { [K in keyof T]?: T[K] };
// Equivalent to: { [K in keyof T]+?: T[K] }

Как реализован Required

Required использует отображаемый тип с модификатором -?.
type Required<T> = { [K in keyof T]-?: T[K] };

Глубокий Partial

Встроенный Partial действует только на верхнем уровне. Для вложенных объектов нужен рекурсивный DeepPartial.
type DeepPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
};

Сочетание Partial и Required

Сделайте некоторые поля обязательными, сохранив остальные необязательными, с помощью пересечения типов.
// id required, everything else optional
type UpsertUser = Required<Pick<User, 'id'>> & Partial<Omit<User, 'id'>>;

Partial и необязательные свойства в интерфейсе

Объявление всех свойств интерфейса необязательными эквивалентно применению Partial, но только для этого конкретного типа. Partial можно повторно использовать с любым типом.

Вывод типов с Partial

TypeScript корректно сужает типы свойств Partial — при обращении к ним результатом может быть T[K] | undefined.
function show(u: Partial<User>) {
  if (u.name !== undefined) {
    console.log(u.name.toUpperCase()); // safe
  }
}

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

Какой служебный тип делает все свойства интерфейса обязательными, включая те, которые ранее были необязательными?

Итоги

Partial делает все свойства необязательными и полезен для частичных исправлений и обновлений. Required делает все свойства обязательными и полезен для проверки после объединения. Оба типа действуют только на верхнем уровне — для вложенных типов используйте рекурсивные версии.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

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

Урок «Partial и Required: переключение обязательности» бесплатный?

Да — полный текст урока «Partial и Required: переключение обязательности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Partial и Required: переключение обязательности»?

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

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

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

Сколько времени занимает урок «Partial и Required: переключение обязательности»?

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

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

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

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

  1. Partial и Required: переключение обязательности
  2. Pick и Omit: выбор свойств
  3. Record: сопоставление ключей с типами значений
  4. Readonly, Exclude, Extract и NonNullable
← Назад к TypeScript Academy