Вопрос проверяет понимание дженериков в TypeScript для создания типобезопасных функций, работающих с разными типами данных.
Дженерик (обобщение) — это механизм TypeScript, который позволяет создавать компоненты, работающие с различными типами, не теряя информацию о типе. Вместо того чтобы писать отдельные функции для каждого типа, вы используете параметр типа, который подставляется при вызове.
Тип-параметр объявляется в угловых скобках <T> перед списком параметров функции. Обычно используют букву T (от Type), но можно любое имя.
function identity<T>(arg: T): T {
return arg;
}
const num = identity(42); // T = number
const str = identity('hello'); // T = stringПри вызове функции TypeScript анализирует переданный аргумент и автоматически выводит конкретный тип для T. В примере выше num будет иметь тип number, а str — string. Если нужно явно указать тип, можно написать identity<number>(42).
function firstElement<T>(arr: T[]): T | undefined {
return arr[0];
}
const firstNum = firstElement([1, 2, 3]); // number | undefined
const firstStr = firstElement(['a', 'b']); // string | undefinedЗдесь T[] означает массив элементов типа T. Функция возвращает первый элемент или undefined, сохраняя тип.
Иногда нужно наложить ограничение на тип, чтобы использовать определённые свойства. Для этого применяется ключевое слово extends:
function getLength<T extends { length: number }>(arg: T): number {
return arg.length;
}
getLength('hello'); // 5
getLength([1, 2]); // 2
getLength(42); // Ошибка: number не имеет lengthТеперь T может быть только типом, у которого есть свойство length.
Дженерики делают функции универсальными и типобезопасными. Их стоит применять везде, где функция должна работать с разными типами, но при этом сохранять строгую типизацию — например, в утилитах для работы с массивами, промисами или HTTP-запросами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию