Skip to main content
Практика завдань

Утиліта type omit в TypeScript

Що таке Omit<T, K>?

Omit<T, K> створює тип, вибираючи всі властивості з T і потім видаляючи ключі, зазначені в K. Це протилежність Pick<T, K>.


Основне використання

typescript
interface User { id: string; name: string; email: string; password: string; createdAt: Date; } // Видалити чутливі поля type PublicUser = Omit<User, "password">; // { id: string; name: string; email: string; createdAt: Date } // Видалити кілька полів type UserPreview = Omit<User, "password" | "createdAt">; // { id: string; name: string; email: string }

Omit vs Pick

УтилітаДіяВикористовуйте, коли
Pick<T, K>Залишити тільки зазначені ключіВам потрібно кілька полів з великого типу
Omit<T, K>Видалити зазначені ключіВам потрібно більшість полів, але ви хочете виключити кілька
typescript
// Ці два типи дають однаковий результат: type A = Pick<User, "id" | "name" | "email">; type B = Omit<User, "password" | "createdAt">; // Обидва: { id: string; name: string; email: string }

Практичні випадки використання

API DTOs (Об'єкти передачі даних)

typescript
interface Product { id: string; name: string; price: number; description: string; createdAt: Date; updatedAt: Date; } // Для створення — без id або часових міток type CreateProductDTO = Omit<Product, "id" | "createdAt" | "updatedAt">; // Для оновлення — без id, всі поля необов'язкові type UpdateProductDTO = Partial<Omit<Product, "id">>;

Пропси компонентів

typescript
interface InputProps { value: string; onChange: (value: string) => void; label: string; error?: string; disabled?: boolean; type: string; } // Користувацький ввід не потребує типу (завжди "text") type TextInputProps = Omit<InputProps, "type">; // Поле для пароля керує своїм власним типом type PasswordInputProps = Omit<InputProps, "type"> & { showToggle?: boolean; };

Безпечне розширення типів

typescript
interface BaseEntity { id: string; createdAt: Date; updatedAt: Date; } // Перезаписати конкретні поля type CreateInput<T extends BaseEntity> = Omit<T, keyof BaseEntity> & { id?: string; // Зробити id необов'язковим для створення };

Як Omit працює внутрішньо

typescript
// Omit побудований з Pick і Exclude: type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>; // Крок за кроком: // 1. keyof User = "id" | "name" | "email" | "password" | "createdAt" // 2. Exclude<keyof User, "password"> = "id" | "name" | "email" | "createdAt" // 3. Pick<User, "id" | "name" | "email" | "createdAt"> = фінальний тип

Важливо:

Omit є одним з найпоширеніших утилітних типів. Він ідеально підходить для створення DTO, видалення чутливих полів з відповідей API та побудови типів пропсів компонентів. Поєднуйте його з Partial, Required та Pick для потужних перетворень типів.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань