Back to questions
Middle+
2
Как сделать так, чтобы функция с Generic принимала только строку или экземпляр класса Bar, а в остальных случаях выдавала ошибку TypeScript?
Companies where asked
VK Tech
Answer from AI
sobes.tech AI
В TypeScript можно ограничить Generic-параметр с помощью условных типов и объединений типов. Чтобы функция принимала только либо строку, либо экземпляр класса Bar, можно сделать так:
class Bar {
// ...
}
function foo<T extends string | Bar>(arg: T): void {
// функция принимает только string или Bar
}
foo('hello'); // ок
foo(new Bar()); // ок
foo(123); // ошибка компиляции
Если нужно более строгий контроль, например, чтобы не принимать подклассы Bar, можно использовать T extends string | Bar и проверять тип внутри функции.
Также можно использовать перегрузки функций:
overload function foo(arg: string): void;
function foo(arg: Bar): void;
function foo(arg: any): void {
// реализация
}
Это позволит TypeScript выдавать ошибку при передаче неподходящего типа.