Що робить Omit<T, K>?
1. Що робить Omit<T, K>
Omit<T, K>- створює новий тип на основіT, виключаючи з нього властивості, перелічені вK.
Синтаксис
Omit<Тип_джерело, 'ключ1' | 'ключ2'>Приклад
interface User {
id: number;
name: string;
email: string;
password: string;
}
type PublicUser = Omit<User, 'password'>;Тепер PublicUser еквівалентний:
{
id: number;
name: string;
email: string;
}Поле
passwordвиключено з типу.
2. Чим Omit протилежний Pick
| Утиліта | Що робить | Приклад |
|---|---|---|
Pick<T, K> | залишає лише вказані властивості | Pick<User, 'id' | 'name'> |
Omit<T, K> | видаляє вказані властивості | Omit<User, 'password'> |
Візуально:
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 на рівні мови виглядає так:
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;Що відбувається:
keyof T- бере всі ключі вихідного типу.Exclude<keyof T, K>- виключає з них ті, що вказані вK.Pick<...>- створює новий тип на основі властивостей, що залишилися.
4. Чи можна видалити кілька властивостей за допомогою Omit
Так, можна вказати одразу кілька властивостей через об'єднання (|):
type UserWithoutSensitive = Omit<User, 'password' | 'email'>;Вийде:
{
id: number;
name: string;
}TypeScript видалить усі перелічені поля з результувального типу.
5. Приклад використання в реальних проєктах
Видалення чутливих даних
interface Employee {
id: number;
name: string;
email: string;
salary: number;
}
type PublicEmployee = Omit<Employee, 'salary'>;Такий тип зручно використовувати для безпечного повернення даних з API.
Спрощені форми
interface FormData {
id: number;
name: string;
createdAt: Date;
updatedAt: Date;
}
type FormInput = Omit<FormData, 'id' | 'createdAt' | 'updatedAt'>;Для форми потрібні лише поля вводу (
name), а решта генерується автоматично.
6. Помилка при неіснуючому ключі
Якщо ти спробуєш видалити поле, якого немає в типі, TypeScript одразу покаже помилку:
type Wrong = Omit<User, 'nickname'>;
// Error: Type '"nickname"' is not assignable to keyof 'User'Тобто
Omitперевіряє, що вказані ключі справді існують уT.
Підсумок
| Питання | Відповідь |
|---|---|
Що робить Omit<T, K> | Створює новий тип без указаних властивостей |
Чим відрізняється від Pick | Pick обирає потрібні поля, Omit - видаляє зайві |
| Чи можна видалити кілька властивостей | Так, через 'prop1' | 'prop2' |
| Що буде, якщо видалити неіснуюче | Помилка: ключ не знайдено в типі |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.