Вопрос проверяет понимание ограничений (constraints) generic-параметров в TypeScript с использованием условных типов и extends для создания точных ограничений на допустимые типы.
В TypeScript для ограничения допустимых типов generic-параметра используется ключевое слово extends. Оно указывает, что тип T должен быть подтипом указанного ограничения. Если передать неподходящий тип, компилятор выдаст ошибку.
class MyClass {}
function process<T extends string | MyClass>(value: T): void {
console.log(value);
}
process('hello'); // OK
process(new MyClass()); // OK
process(42); // Ошибка: число не входит в ограничениеЕсли нужно разрешить только конкретные экземпляры, можно применить условный тип с never:
type Allowed<T> = T extends string | MyClass ? T : never;
function restricted<T>(value: Allowed<T>): void {
// value гарантированно string или MyClass
}
restricted('test'); // OK
restricted(new MyClass()); // OK
restricted(true); // Ошибка: boolean не разрешёнТакие ограничения полезны при создании типобезопасных API, где нужно гарантировать, что функция принимает только определённые типы данных. Например, в библиотеках для работы с формами или сериализации.
Вывод: Используйте extends с объединением типов для простых случаев и условные типы с never для более сложной фильтрации. Это делает код надёжнее и предотвращает ошибки на этапе компиляции.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию