Что такое Omit в TypeScript

Ответ

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 эта хуйня не попадает, он про неё и не узнает. Чисто для твоего спокойствия и порядка в голове.