Утилита Omit<T, K> — это мощный инструмент в TypeScript для создания новых типов на основе существующих путем исключения определенных свойств. Это полная противоположность Pick. Представьте, что у вас есть интерфейс User с полями id, name и password, но для отображения профиля вам нужен тип без пароля. Вместо дублирования кода вы используете Omit<User, 'password'>.
Синтаксис позволяет исключать как одно свойство, так и несколько, используя объединение строк (Union Types), например 'id' | 'createdAt'. Эти уроки и примеры помогут вам понять, как эффективно использовать Omit для сокращения бойлерплейта и повышения поддерживаемости кода. Практические задания направлены на отработку синтаксиса и понимание логики исключения полей.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Исключение одного поля
В этом задании вам предстоит поработать с утилитарным типом Omit в TypeScript. Дан интерфейс, описывающий объект пользователя, и тип, созданный с помощью Omit, который исключает одно из полей исходного интерфейса. Ваша задача — определить, какое именно поле было исключено, и вписать его название в указанное место, чтобы объявленный тип соответствовал результату применения Omit. Обратите внимание на структуру кода и используемые типы.
interface User {
id: number;
name: string;
email: string;
age: number;
}
type UserWithoutField = Omit<User, input1S>;
// UserWithoutField должен быть эквивалентен:
// {
// id: number;
// name: string;
// email: string;
// }
// (поле age исключено)2. Какие поля исчезнут?
Перед вами исходный интерфейс и определение нового типа с использованием утилиты Omit. Внимательно изучите код. Ваша задача — кликнуть на те свойства в исходном интерфейсе, которые будут удалены (исключены) в новом типе. Не отмечайте другие части кода, такие как ключевые слова, имена типов, фигурные скобки или свойства, которые останутся в новом типе.
interface User {
{{id~|~t1}}: number;
{{name~|~t2}}: string;
{{email~|~t3}}: string;
{{password~|~t4}}: string;
{{age~|~t5}}: number;
}
type UserWithoutSensitiveData = Omit; 3. Исключение нескольких полей
В этом задании вам предстоит использовать utility type Omit для исключения нескольких полей из интерфейса. В коде TypeScript объявлен интерфейс с несколькими свойствами. Вам нужно выбрать из выпадающего списка правильный union type (объединение строковых литералов), который исключит два указанных поля, чтобы получить новый тип с оставшимися свойствами. Обратите внимание на синтаксис union type и правильное написание строковых литералов.
interface User {
id: number;
name: string;
email: string;
age: number;
isActive: boolean;
}
// Исключите поля 'id' и 'age' из интерфейса User
type UserWithoutIdAndAge = Omit<User, input1S>;
const user: UserWithoutIdAndAge = {
name: 'Alice',
email: 'alice@example.com',
isActive: true
};4. Ошибка в имени свойства
В данном фрагменте кода TypeScript используется утилитный тип Omit для создания нового типа путём исключения определённого свойства. Однако в строке с применением Omit допущена опечатка в имени исключаемого свойства — указано свойство, которого нет в исходном типе. Найдите и исправьте эту строку, чтобы код стал корректным и тип UserWithoutEmail был определён правильно.
type User = { id: number; name: string; email: string;}; // Допущена опечатка в имени исключаемого свойстваtype UserWithoutEmail = Omit<User, 'emial'>; const user: UserWithoutEmail = { id: 1, name: 'John Doe'};5. Исходный тип vs Результат
В левой колонке приведены примеры использования утилитарного типа Omit в TypeScript. В правой колонке указаны описания результирующих типов после применения Omit. Сопоставьте каждый пример использования Omit с соответствующим описанием того, какие поля остались в результирующем типе. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.
Omit<{ name: string; age: number; }, 'age'>Omit<{ a: number; b: string; c: boolean; }, 'b' | 'c'>Omit<{ x: number; y: number; z: number; }, 'z'>Omit<{ id: number; title: string; content: string; }, 'id'>Omit<{ firstName: string; lastName: string; age: number; }, 'age' | 'lastName'>6. Создание DTO
Из предложенных строк соберите корректное определение типа на TypeScript, используя утилитный тип Omit. Вам нужно создать тип CreateUserDto, который будет представлять собой базовый интерфейс User, но без поля 'id'. Включите только необходимые строки, чтобы код корректно компилировался в TypeScript. Лишние строки в решение не входят.
interface User { id: number; name: string; email: string;}type CreateUserDto = Omit<User, 'id'>;interface CreateUserDto { name: string; email: string;}type UserDto = Omit<User, 'email'>;7. Доступность свойства
Проанализируйте приведённый фрагмент кода на TypeScript, в котором используется утилитарный тип Omit для создания нового типа. Затем выполняется попытка обращения к свойству, которое было исключено из этого типа. Определите, приведёт ли эта попытка к ошибке компиляции TypeScript. Выберите правильный вариант из предложенных.
type Person = {
id: number;
name: string;
age: number;
email: string;
};
type PersonWithoutEmail = Omit<Person, 'email'>;
const user: PersonWithoutEmail = {
id: 1,
name: "Alice",
age: 30
};
console.log(user.email);