🧱 Суть
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-типы позволяют переиспользовать существующие типы без дублирования кода