🧱 Суть

Omit, Pick и Partial – это utility-типы TypeScript, которые позволяют создавать новые типы на основе существующих.
Они помогают избежать дублирования и описывать только нужные поля.

📦 Проблема

1. Нужны не все поля типа

Например, при создании объекта часть полей заполняется автоматически.

2. Нужны только некоторые поля

Иногда достаточно работать лишь с небольшой частью типа.

3. Часть полей должна быть необязательной

Например, функция может принимать как полные, так и неполные данные.

✅ Решение

Использовать utility-типы TypeScript.

💻 Код

Omit

Исключает указанные поля из существующего типа.

export const DEFAULT_NOTES: Omit<
  Note,
  'id' | 'user_id' | 'created_at' | 'updated_at'
>[]

Используется, когда часть полей будет заполнена автоматически.

Pick

Оставляет только указанные поля.

type SeedNote = Pick<
  Note,
  'text' | 'order_idx' | 'id' | 'created_at' | 'updated_at'
>

Используется, когда нужна только часть структуры.

Partial

Делает все поля типа необязательными.

type SeedNote = Partial<
  Pick<Note, 'text' | 'order_idx' | 'id' | 'created_at' | 'updated_at'>
>

Такой тип позволяет передавать объекты с любым набором выбранных полей.

Пример использования

DEFAULT_NOTES

Omit<Note, 'id' | 'user_id' | 'created_at' | 'updated_at'>

Подходит для “сырых” заметок, где id и даты будут сгенерированы позже.

SeedNote

Partial<Pick<Note, ...>>

Подходит для функций, которые могут принимать как новые, так и уже существующие заметки.

🎯 Вывод

  • Omit – исключает поля из типа
  • Pick – выбирает только нужные поля
  • Partial – делает поля необязательными
  • utility-типы позволяют переиспользовать существующие типы без дублирования кода

🔗 Связано