TypeScript предоставляет мощный набор инструментов для манипуляции типами. Один из них — Exclude<T, U>. Этот Utility Type позволяет создать новый тип, исключая из исходного объединения (Union) все типы, которые подходят под описание второго аргумента.
Синтаксис выглядит так: type NewType = Exclude<SourceType, TypesToRemove>.
Зачем это нужно?
Часто у нас есть общий список возможных значений (например, статусы 'success' | 'error' | 'loading'), и нам нужно создать подтип, который включает всё, кроме ошибки. Вместо дублирования кода мы просто исключаем лишнее.
Пройдите тренажер, чтобы научиться «вычитать» типы.
- Модуль 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
- Exclude.
- Extract.
- NonNullable.
- Модуль 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. Вычисление Exclude
В этом задании вам нужно применить знание Utility Type Exclude в TypeScript. Ниже приведён фрагмент кода, в котором объявлены два типа: A и B. Тип B определяется с помощью Exclude, исключая некоторые элементы из типа A. Ваша задача — определить, чему будет равен тип B после применения Exclude. Введите результат в виде строки, представляющей итоговый тип (например, 'a' или 'a' | 'b'), без лишних пробелов и кавычек.
type A = 'x' | 'y' | 'z';
type B = Exclude<A, 'x' | 'z'>;2. Синтаксис Exclude
Дополните фрагмент кода TypeScript так, чтобы был объявлен новый тип 'NonAdminRole', который исключает из всех возможных ролей (UserRole) значение 'admin'. Используйте Utility Type Exclude, чтобы создать этот тип. Обратите внимание, что в коде пропущено ключевое слово 'Exclude' и запятая между его аргументами. Ваша задача — вставить их в правильные места, чтобы код был синтаксически корректным и соответствовал логике задачи.
type UserRole = 'admin' | 'user' | 'moderator' | 'guest';
// Исключаем 'admin' из всех возможных ролей
input1S input2S NonAdminRole = input3S<UserRole, 'admin'>;
3. Фильтрация примитивов
В этом задании вам предстоит поработать с утилитарным типом Exclude в TypeScript. У вас есть объединение типов string | number | boolean. Вам нужно исключить из него один тип, чтобы остались только string и number. В коде ниже заполните пропуск, выбрав правильный тип из выпадающего списка, чтобы результирующий тип WithoutBoolean был равен string | number.
type AllTypes = string | number | boolean;
type WithoutBoolean = Exclude<AllTypes, input1S>;
// WithoutBoolean должен быть string | number4. Совместимость типов
Проанализируйте приведённый фрагмент кода TypeScript. Используется утилитный тип Exclude для создания нового типа NoNull, который исключает null из исходного union-типа. Затем переменной этого нового типа пытаются присвоить значение null. Что произойдёт при попытке компиляции этого кода? Выберите правильный вариант ответа.
type NoNull = Exclude<string | number | null, null>;
let value: NoNull;
value = null;5. Создание типа статусов
Из предложенных строк соберите корректное определение типа TypeScript с использованием Utility Type Exclude. Вам нужно создать тип NonErrorStatus, который исключает литерал 'error' из union-типа Status. Используйте ключевое слово type, имя типа, знак равенства, Exclude с угловыми скобками, исходный тип Status и исключаемый литерал 'error'. Обратите внимание на правильный синтаксис и порядок элементов. Некоторые строки являются лишними и не должны входить в итоговое решение.
typeNonErrorStatus =Exclude<Status, 'error'>;Extract<Status, 'error'>ErrorStatus =6. Что останется?
Перед вами объявление типа TypeScript с использованием Utility Type Exclude. Исходный тип Letters представляет собой объединение (union) шести строковых литералов. Ниже применяется тип Exclude
type Letters = '{{a~|~t1}}' | '{{b~|~t2}}' | '{{c~|~t3}}' | '{{d~|~t4}}' | '{{e~|~t5}}' | '{{f~|~t6}}';
type Vowels = Exclude; 7. Аргументы дженерика
В утилите Exclude дженерика TypeScript выделите два типа-аргумента. Для каждого выделенного сегмента укажите, является ли он исходным типом (T) или исключаемым типом (U). Это поможет понять структуру и назначение параметров дженерика Exclude.
Exclude<{{string | number~|~t1}}, {{number~|~t2}}>