Иногда при использовании Generics мы хотим, чтобы параметр типа был необязательным. Для этого в TypeScript существуют значения по умолчанию для Generic (Generic Defaults). Синтаксис напоминает параметры функции по умолчанию: .
Если пользователь не укажет тип явно и TypeScript не сможет его вывести из аргументов, будет использован тип DefaultType. Это полезно для создания гибких API, которые работают «из коробки» для большинства случаев (например, по умолчанию string), но позволяют переопределение для специфических задач. Важно помнить: обязательные параметры типов всегда должны идти перед параметрами со значениями по умолчанию.
- Модуль 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 — ограничения
- Generic Constraints (extends).
- Использование keyof с Generics.
- Значения по умолчанию для Generic.
- Модуль 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. Синтаксис значения по умолчанию
Дополните объявление класса Box, указав значение по умолчанию для универсального типа T как string. Также укажите тип для поля content и параметра конструктора, используя универсальный тип T (то есть сам параметр типа). Заполните пропуски в коде, чтобы класс был корректно объявлен и мог работать с разными типами данных, но по умолчанию использовал string.
class Box<T input1S> {
content: input2S;
constructor(content: input2S) {
this.content = content;
}
}2. Явное указание vs Умолчание
Перед вами несколько вызовов функции `identity
identity("Hello")identity<string>("World")identity(42)identity<number>(100)identity(true)identity<boolean>(false)identity([])identity<any>("test")3. Порядок параметров
В данном фрагменте кода TypeScript допущена ошибка, связанная с порядком параметров generic-типа при использовании значений по умолчанию. Исправьте определение типа, чтобы код стал корректным и мог использоваться с одним аргументом типа. Обратите внимание на расположение параметров со значениями по умолчанию относительно обязательных параметров.
type Container<T = string, U> = { value1: T; value2: U;}; const obj: Container<number> = { value1: 42, value2: 'test' };4. Что выведет тип?
Проанализируйте объявление generic-типа Container с параметром по умолчанию и объявление переменной без явного указания типа-параметра. Определите, какой конкретный тип TypeScript выведет для этой переменной на основе значения по умолчанию. Выберите правильный вариант из предложенных.
type Container<T = number> = T;
let a: Container;5. Constraint и Default вместе
В этом задании вам нужно заполнить пропуски в определении обобщённого типа (generic) TypeScript, чтобы параметр типа T имел ограничение (constraint) и значение по умолчанию (default). Используйте выпадающие списки, чтобы выбрать правильные ключевые слова и значения для построения корректной конструкции
// Объявление обобщённого типа с ограничением и значением по умолчанию
type DefaultValue<T input1S number input2S input3S> = T;
// Использование типа с явным указанием аргумента
const example: DefaultValue<number> = 10;6. HTTP ответ по умолчанию
Из предложенных строк соберите корректный интерфейс TypeScript ApiResponse, в котором generic-параметр Body имеет значение по умолчанию any, а также присутствуют свойства data типа Body и status типа number. Учтите, что порядок объявления свойств data и status не важен для корректности кода, но оба должны быть включены. Лишние строки в решение входить не должны.
interface ApiResponse<Body = any> { data: Body; status: number;}interface ApiResponse<Body> { body: Body;7. Алгоритм выбора типа
Проанализируйте 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. Использование значения по умолчанию