Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: TypeScript, generic, optional parameter, default type, type constraint

Как задать опциональный generic?

Этот вопрос проверяет понимание синтаксиса TypeScript для создания универсальных типов (generics) с необязательными параметрами, что необходимо для написания гибких и переиспользуемых компонентов.

Короткий ответ

В TypeScript опциональный generic-параметр можно задать, указав для него значение по умолчанию. Синтаксис похож на параметры функций по умолчанию: . Это позволяет использовать generic-тип, но если он не указан явно, будет использоваться тип по умолчанию. Такой подход делает компоненты более гибкими, так как они могут работать и с конкретным типом, и с типом по умолчанию, если пользователь его не указал.

Длинный ответ

Generics (обобщённые типы) в TypeScript позволяют создавать компоненты, которые могут работать с различными типами данных, сохраняя при этом информацию о типе. Иногда мы хотим, чтобы generic-параметр был необязательным, то есть если пользователь его не укажет, использовалось бы разумное значение по умолчанию. Это достигается с помощью синтаксиса присваивания значения по умолчанию для generic-параметра.

Синтаксис опционального generic

Основной синтаксис выглядит так: вы объявляете generic-параметр и сразу присваиваете ему тип по умолчанию через знак равенства.

// Функция с опциональным generic. По умолчанию тип — string.
function createArray<T = string>(length: number, value: T): T[] {
  return Array(length).fill(value);
}

// Использование с явным указанием типа (number).
const numArray = createArray<number>(3, 42); // Тип: number[]

// Использование без указания типа — будет использован string.
const strArray = createArray(3, "hello"); // Тип: string[]

Где это применяется

Опциональные generics особенно полезны в библиотеках и утилитах, где вы хотите предоставить гибкость, но также иметь безопасное поведение по умолчанию. Например:

  • В функциях-утилитах, таких как createStore в состоянии, где состояние по умолчанию может быть пустым объектом.
  • В компонентах UI (React, Vue), где пропсы могут быть обобщёнными, но имеют разумные значения по умолчанию.
  • В декораторах или фабриках, которые могут работать с разными типами, но чаще всего с одним конкретным.

Пример с интерфейсом и классами

Опциональные generics можно использовать не только в функциях, но и в интерфейсах, типах и классах.

// Интерфейс ответа API с опциональным generic для данных.
interface ApiResponse<TData = Record<string, unknown>> {
  success: boolean;
  data: TData;
}

// Использование с конкретным типом.
const userResponse: ApiResponse<{ name: string }> = {
  success: true,
  data: { name: "Alice" }
};

// Использование без типа — data будет Record<string, unknown>.
const basicResponse: ApiResponse = {
  success: false,
  data: { errorCode: 404 }
};

Комбинация с ограничениями (constraints)

Вы можете комбинировать опциональные generics с ограничениями, используя ключевое слово extends. При этом значение по умолчанию должно удовлетворять ограничению.

// Generic с ограничением (должен быть объектом) и значением по умолчанию.
function mergeObjects<T extends object = {}\>(obj1: T, obj2: T): T {
  return { ...obj1, ...obj2 };
}

// Работает с любым объектом.
const result1 = mergeObjects({ a: 1 }, { b: 2 }); // Тип: { a: number, b: number }

// Если не передать аргументы, тип по умолчанию {} не будет полезен,
// но синтаксически это допустимо.

Вывод: Используйте опциональные generics с типом по умолчанию, когда вы создаёте универсальные конструкции (функции, типы, компоненты), которые должны работать "из коробки" без явного указания типа, но при этом предоставлять возможность тонкой настройки для продвинутых сценариев. Это улучшает опыт разработчика, сокращая boilerplate-код в простых случаях.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#generic

#optional parameter

#default type

#type constraint

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию