Вопрос проверяет понимание утилитарных типов TypeScript и различие между работой с объектными типами и объединениями.
Omit используется для удаления свойств из объектного типа.Exclude применяется для исключения элементов из union-типа.
Несмотря на схожие названия, они работают с разными сущностями.Omit обычно применяют для DTO и пропсов компонентов.Exclude — для сужения наборов возможных значений.
Чтобы корректно применять Omit и Exclude, важно понимать, на каком уровне работает тип: структура объекта или объединение типов.
Определение:
Omit — утилитарный тип, который удаляет указанные ключи из объектного типа.
Exclude — утилитарный тип, который исключает элементы из union-типа.
Omit применяется, когда нужно взять существующий тип и убрать из него одно или несколько полей.
type User = {
id: string;
email: string;
password: string;
};
type PublicUser = Omit<User, "password">;
Пропсы React-компонентов
DTO для API
Публичные представления сущностей
Exclude используется для удаления отдельных вариантов из объединения.
type Status = "loading" | "success" | "error";
type StableStatus = Exclude<Status, "loading">;
Статусы
Типы событий
Ограничение допустимых значений
Попытка применить Exclude к объектному типу
Использование Omit для работы с union
Omit работает с ключами объектов, а Exclude — с вариантами union-типа; выбор зависит от формы исходного типа.