Skip to main content

Що робить Omit<T, K>?

1. Що робить Omit<T, K>

Omit<T, K> - створює новий тип на основі T, виключаючи з нього властивості, перелічені в K.


Синтаксис

javascript
Omit<Тип_джерело, 'ключ1' | 'ключ2'>

Приклад

javascript
interface User { id: number; name: string; email: string; password: string; } type PublicUser = Omit<User, 'password'>;

Тепер PublicUser еквівалентний:

javascript
{ id: number; name: string; email: string; }

Поле password виключено з типу.


2. Чим Omit протилежний Pick

УтилітаЩо робитьПриклад
Pick<T, K>залишає лише вказані властивостіPick<User, 'id' | 'name'>
Omit<T, K>видаляє вказані властивостіOmit<User, 'password'>

Візуально:

javascript
interface User { id: number; name: string; email: string; password: string; } // Pick type MinimalUser = Pick<User, 'id' | 'name'>; // { id: number; name: string } // Omit type SafeUser = Omit<User, 'password'>; // { id: number; name: string; email: string }

Тобто: Pick = "взяти потрібне", Omit = "прибрати зайве".


3. Як Omit<T, K> працює всередині

Реалізація Omit на рівні мови виглядає так:

javascript
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

Що відбувається:

  1. keyof T - бере всі ключі вихідного типу.
  2. Exclude<keyof T, K> - виключає з них ті, що вказані в K.
  3. Pick<...> - створює новий тип на основі властивостей, що залишилися.

4. Чи можна видалити кілька властивостей за допомогою Omit

Так, можна вказати одразу кілька властивостей через об'єднання (|):

javascript
type UserWithoutSensitive = Omit<User, 'password' | 'email'>;

Вийде:

javascript
{ id: number; name: string; }

TypeScript видалить усі перелічені поля з результувального типу.


5. Приклад використання в реальних проєктах

Видалення чутливих даних

javascript
interface Employee { id: number; name: string; email: string; salary: number; } type PublicEmployee = Omit<Employee, 'salary'>;

Такий тип зручно використовувати для безпечного повернення даних з API.


Спрощені форми

javascript
interface FormData { id: number; name: string; createdAt: Date; updatedAt: Date; } type FormInput = Omit<FormData, 'id' | 'createdAt' | 'updatedAt'>;

Для форми потрібні лише поля вводу (name), а решта генерується автоматично.


6. Помилка при неіснуючому ключі

Якщо ти спробуєш видалити поле, якого немає в типі, TypeScript одразу покаже помилку:

javascript
type Wrong = Omit<User, 'nickname'>; // Error: Type '"nickname"' is not assignable to keyof 'User'

Тобто Omit перевіряє, що вказані ключі справді існують у T.


Підсумок

ПитанняВідповідь
Що робить Omit<T, K>Створює новий тип без указаних властивостей
Чим відрізняється від PickPick обирає потрібні поля, Omit - видаляє зайві
Чи можна видалити кілька властивостейТак, через 'prop1' | 'prop2'
Що буде, якщо видалити неіснуючеПомилка: ключ не знайдено в типі

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

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

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