Утиліта 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.