Ответ
Omit — это утилитарный тип в TypeScript, который создаёт новый тип, исключая указанные свойства из существующего типа.
Пример:
interface User {
id: number;
name: string;
email: string;
age: number;
}
type UserWithoutEmail = Omit<User, 'email'>;
// Результат: { id: number; name: string; age: number; }
Особенности:
-
Можно исключить несколько свойств через
|:type SimplifiedUser = Omit<User, 'email' | 'age'>; -
Полезен для создания производных типов без дублирования кода.
-
Работает на уровне типов, не влияя на runtime.
Аналог Pick, но наоборот — вместо выбора свойств исключает их.
Ответ 18+ 🔞
А, ну вот, опять эти ваши типы-утилиты, блядь. Слушай, сейчас объясню про Omit, чтобы у тебя в голове всё встало на свои места, а не как попало, как у того немого Герасима с Муму.
Представь, что у тебя есть интерфейс, ну, типа, описание пользователя, всё по-взрослому:
interface User {
id: number;
name: string;
email: string;
age: number;
password: string; // вот эта штука, которую всем показывать не надо
}
И вот тебе нужно отправить данные этого пользователя на фронтенд, но, мать его, password показывать нельзя! И email, допустим, тоже не надо. Что делать? Переписывать весь интерфейс? Да ну нахуй, это же дичь!
Вот тут и выходит на сцену наш герой — Omit. Это как взять и вычеркнуть из списка ненужные пункты, ёпта.
// Берём тип User и говорим: "Исключи отсюда, блядь, 'password'"
type SafeUser = Omit<User, 'password'>;
// Получается: { id: number; name: string; email: string; age: number; }
Во, уже лучше. Но начальник-перфекционист прикопался: «А email зачем светишь, а?». Ну, исключаем и его, сука, разом!
// Исключаем несколько свойств через '|' (пайп), это как "или"
type PublicUserProfile = Omit<User, 'password' | 'email'>;
// И что остаётся? Правильно: { id: number; name: string; age: number; }
Вот и вся магия, блядь. Создал новый тип, не накосячив в старом. Главное — не перепутать с его братом-близнецом Pick. Тот, наоборот, выбирает свойства, которые нужны. А Omit — выбрасывает те, которые не нужны. Как в жизни: один копит хлам, другой выносит мусор.
И запомни, чувак: это всё работает только на этапе проверки типов. В скомпилированный JavaScript эта хуйня не попадает, он про неё и не узнает. Чисто для твоего спокойствия и порядка в голове.