Exclude

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

TypeScript предоставляет мощный набор инструментов для манипуляции типами. Один из них — Exclude<T, U>. Этот Utility Type позволяет создать новый тип, исключая из исходного объединения (Union) все типы, которые подходят под описание второго аргумента.

Синтаксис выглядит так: type NewType = Exclude<SourceType, TypesToRemove>.

Зачем это нужно?
Часто у нас есть общий список возможных значений (например, статусы 'success' | 'error' | 'loading'), и нам нужно создать подтип, который включает всё, кроме ошибки. Вместо дублирования кода мы просто исключаем лишнее.

Пройдите тренажер, чтобы научиться «вычитать» типы.

Список тем

1. Вычисление Exclude

id: 40728_excl_01_calc

В этом задании вам нужно применить знание 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

id: 40728_excl_02_replace

Дополните фрагмент кода TypeScript так, чтобы был объявлен новый тип 'NonAdminRole', который исключает из всех возможных ролей (UserRole) значение 'admin'. Используйте Utility Type Exclude, чтобы создать этот тип. Обратите внимание, что в коде пропущено ключевое слово 'Exclude' и запятая между его аргументами. Ваша задача — вставить их в правильные места, чтобы код был синтаксически корректным и соответствовал логике задачи.

Заполните пропуски
type UserRole = 'admin' | 'user' | 'moderator' | 'guest';

// Исключаем 'admin' из всех возможных ролей
input1S input2S NonAdminRole = input3S<UserRole, 'admin'>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Фильтрация примитивов

id: 40728_excl_03_select

В этом задании вам предстоит поработать с утилитарным типом Exclude в TypeScript. У вас есть объединение типов string | number | boolean. Вам нужно исключить из него один тип, чтобы остались только string и number. В коде ниже заполните пропуск, выбрав правильный тип из выпадающего списка, чтобы результирующий тип WithoutBoolean был равен string | number.

Нужно правильно расставить в пропуски предложенные варианты
type AllTypes = string | number | boolean;
type WithoutBoolean = Exclude<AllTypes, input1S>;
// WithoutBoolean должен быть string | number
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Совместимость типов

id: 40728_excl_04_predict

Проанализируйте приведённый фрагмент кода TypeScript. Используется утилитный тип Exclude для создания нового типа NoNull, который исключает null из исходного union-типа. Затем переменной этого нового типа пытаются присвоить значение null. Что произойдёт при попытке компиляции этого кода? Выберите правильный вариант ответа.

Выберите правильный вариант ответа
type NoNull = Exclude<string | number | null, null>;
let value: NoNull;
value = null;
Сообщения
Проверить
Показать подсказку

5. Создание типа статусов

id: 40728_excl_05_build

Из предложенных строк соберите корректное определение типа TypeScript с использованием Utility Type Exclude. Вам нужно создать тип NonErrorStatus, который исключает литерал 'error' из union-типа Status. Используйте ключевое слово type, имя типа, знак равенства, Exclude с угловыми скобками, исходный тип Status и исключаемый литерал 'error'. Обратите внимание на правильный синтаксис и порядок элементов. Некоторые строки являются лишними и не должны входить в итоговое решение.

Перетяните в правильном порядке строки из одного блока в другой
type
NonErrorStatus =
Exclude<
Status, 'error'
>;
Extract<Status, 'error'>
ErrorStatus =
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Что останется?

id: 40728_excl_06_click

Перед вами объявление типа TypeScript с использованием Utility Type Exclude. Исходный тип Letters представляет собой объединение (union) шести строковых литералов. Ниже применяется тип Exclude. Ваша задача — внимательно изучить код и кликнуть на те члены исходного объединения Letters (в первой строке), которые останутся в результирующем типе после применения Exclude. Не отмечайте другие части кода, такие как ключевые слова, имена типов, операторы или исключаемые литералы во второй строке.

Кликните по всем фрагментам, которые подходят под условие задания.
type Letters = '{{a~|~t1}}' | '{{b~|~t2}}' | '{{c~|~t3}}' | '{{d~|~t4}}' | '{{e~|~t5}}' | '{{f~|~t6}}';
type Vowels = Exclude;
Сообщения
Проверить
Показать подсказку

7. Аргументы дженерика

id: 40728_excl_07_highlight

В утилите Exclude дженерика TypeScript выделите два типа-аргумента. Для каждого выделенного сегмента укажите, является ли он исходным типом (T) или исключаемым типом (U). Это поможет понять структуру и назначение параметров дженерика Exclude.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
Exclude<{{string | number~|~t1}}, {{number~|~t2}}>
Исключаемый тип (U)
Исходный тип (T)
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40728_compiler
TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру