Значения по умолчанию для Generic

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

Тренажер по TypeScript

Иногда при использовании Generics мы хотим, чтобы параметр типа был необязательным. Для этого в TypeScript существуют значения по умолчанию для Generic (Generic Defaults). Синтаксис напоминает параметры функции по умолчанию: .

Если пользователь не укажет тип явно и TypeScript не сможет его вывести из аргументов, будет использован тип DefaultType. Это полезно для создания гибких API, которые работают «из коробки» для большинства случаев (например, по умолчанию string), но позволяют переопределение для специфических задач. Важно помнить: обязательные параметры типов всегда должны идти перед параметрами со значениями по умолчанию.

Список тем

1. Синтаксис значения по умолчанию

id: 40719_gd_replace_syntax

Дополните объявление класса Box, указав значение по умолчанию для универсального типа T как string. Также укажите тип для поля content и параметра конструктора, используя универсальный тип T (то есть сам параметр типа). Заполните пропуски в коде, чтобы класс был корректно объявлен и мог работать с разными типами данных, но по умолчанию использовал string.

Заполните пропуски
class Box<T input1S> {
  content: input2S;

  constructor(content: input2S) {
    this.content = content;
  }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Явное указание vs Умолчание

id: 40719_gd_sort_usage

Перед вами несколько вызовов функции `identity(arg: T): T`, которая использует generic с типом по умолчанию `string`. Распределите эти вызовы по двум категориям: где используется тип по умолчанию (string), и где тип перезаписан (явно указан или выведен из аргумента другого типа). Обратите внимание, что тип по умолчанию применяется только когда тип не указан явно и аргумент имеет тип `string`.

Перетяните элементы в соответствующие блоки
Используется тип по умолчанию (string)
Тип перезаписан (явно или через аргумент)
identity("Hello")
identity<string>("World")
identity(42)
identity<number>(100)
identity(true)
identity<boolean>(false)
identity([])
identity<any>("test")
Сообщения
Проверить
Показать подсказку

3. Порядок параметров

id: 40719_gd_error_order

В данном фрагменте кода TypeScript допущена ошибка, связанная с порядком параметров generic-типа при использовании значений по умолчанию. Исправьте определение типа, чтобы код стал корректным и мог использоваться с одним аргументом типа. Обратите внимание на расположение параметров со значениями по умолчанию относительно обязательных параметров.

Найдите ошибку и исправьте
type Container<T = string, U> = {
  value1: T;
  value2: U;
};
 
const obj: Container<number> = { value1: 42, value2: 'test' };
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Что выведет тип?

id: 40719_gd_predict_type_inference

Проанализируйте объявление generic-типа Container с параметром по умолчанию и объявление переменной без явного указания типа-параметра. Определите, какой конкретный тип TypeScript выведет для этой переменной на основе значения по умолчанию. Выберите правильный вариант из предложенных.

Выберите правильный вариант ответа
type Container<T = number> = T;
let a: Container;
Сообщения
Проверить
Показать подсказку

5. Constraint и Default вместе

id: 40719_gd_select_fill_combination

В этом задании вам нужно заполнить пропуски в определении обобщённого типа (generic) TypeScript, чтобы параметр типа T имел ограничение (constraint) и значение по умолчанию (default). Используйте выпадающие списки, чтобы выбрать правильные ключевые слова и значения для построения корректной конструкции . Обратите внимание на порядок и синтаксис объявления generic-параметров.

Нужно правильно расставить в пропуски предложенные варианты
// Объявление обобщённого типа с ограничением и значением по умолчанию
type DefaultValue<T input1S number input2S input3S> = T;

// Использование типа с явным указанием аргумента
const example: DefaultValue<number> = 10;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. HTTP ответ по умолчанию

id: 40719_gd_build_request

Из предложенных строк соберите корректный интерфейс TypeScript ApiResponse, в котором generic-параметр Body имеет значение по умолчанию any, а также присутствуют свойства data типа Body и status типа number. Учтите, что порядок объявления свойств data и status не важен для корректности кода, но оба должны быть включены. Лишние строки в решение входить не должны.

Перетяните в правильном порядке строки из одного блока в другой
interface ApiResponse<Body = any> {
  data: Body;
  status: number;
}
interface ApiResponse<Body> {
  body: Body;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Алгоритм выбора типа

id: 40719_gd_analyze_resolution

Проанализируйте TypeScript-код сверху и восстановите последовательность шагов, которые TypeScript выполняет для определения типа T в generic-функции. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить алгоритм выбора типа: от явного указания до значения по умолчанию.

function createValue<T = string>(value?: T): T | undefined {
  return value;
}

// Примеры вызовов, демонстрирующие разные способы определения T:
const val1 = createValue<number>(100);  // 1. Явное указание
const val2 = createValue("Hello");      // 2. Вывод из аргумента
const val3 = createValue();             // 3. Использование значения по умолчанию
Расположите элементы в логичном порядке
Если значение по умолчанию не задано, то T становится unknown.
Если тип не указан явно, TypeScript пытается вывести его из переданных аргументов.
Если тип указан явно, то T принимает этот указанный тип.
Если тип может быть выведен из аргументов, то T принимает выведенный тип.
Если тип не может быть выведен из аргументов, то T принимает значение по умолчанию (если оно задано).
Проверка, указан ли тип T явно в угловых скобках (например, ).
Сообщения
Проверить
Показать подсказку

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

id: 40719_compiler

Этот пример демонстрирует использование значений по умолчанию для Generic-параметров в TypeScript. Вы увидите, как можно задавать тип по умолчанию для обобщенного типа, что упрощает использование generic-классов и функций. Попробуйте изменять типы в примере: замените string на number, добавьте новые generic-параметры, создайте свой класс с ограничениями и значениями по умолчанию. Экспериментируйте с разными типами и смотрите, как TypeScript выводит типы или выдает ошибки.

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