Sobes.tech
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 выдавать ошибку при передаче неподходящего типа.