PassFront
  1. PassFront
  2. База знаний
  3. Типы и интерфейсы

Возможно ли записывать не обязательные поля в type в TypeScript?

Типы и интерфейсы

Да. Необязательное поле в type (как и в interface) помечают знаком `?`.

type User = {
  id: string;
  name: string;
  email?: string;   // необязательное
};

const a: User = { id: '1', name: 'Анна' };                  // ок
const b: User = { id: '2', name: 'Иван', email: 'i@m.ru' };  // ок

Тип необязательного поля

При чтении user.email имеет тип string | undefined — перед использованием нужна проверка:

const domain = user.email?.split('@')[1];

Связанные приёмы

  • Partial<User> — сделать необязательными все поля.
  • Required<User> — наоборот, все обязательными.
  • Pick + Partial — необязательными только некоторые поля.
  • С флагом exactOptionalPropertyTypes поле с ? нельзя явно присвоить undefined — только пропустить.

Отличие от email: string | undefined

Поле с | undefined обязательно присутствует в объекте (пусть и со значением undefined), а email? можно не указывать вовсе.

Коротко для собеседования

Да, через ? после имени поля; при чтении тип включает undefined, а Partial/Required меняют обязательность всех полей сразу.

Подробнее: TypeScript Handbook — Optional Properties

Другие вопросы раздела