Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Omit<User, "email"> даёт { name: string; age: number }. Поля email в типе нет, поэтому попытка положить его в объектный литерал становится ошибкой, и директива оказывается на месте.
Результат один и тот же, отличается только то, что перечисляется:
Разница проявляется, когда в User добавят новое поле, например phone. Вариант с Omit подхватит его автоматически (и телефон окажется публичным), вариант с Pick продолжит отдавать только имя и возраст.
Отсюда практическое правило: для белого списка (что можно отдавать наружу) надёжнее Pick, для чёрного (что нужно спрятать) удобнее Omit. В коде, который отвечает за приватность, безопаснее по умолчанию скрывать всё новое, то есть Pick.
Ключи в Omit не проверяются на принадлежность типу:
Pick в такой ситуации ругается. Это делает опечатку в Omit тихой: тип соберётся, но поле останется. Ещё один аргумент в пользу Pick там, где цена ошибки высока.
Ключи перечисляются через |, как и в Pick.