Sobes.tech
Middle+

Comment faire en sorte qu'une fonction avec un générique n'accepte qu'une chaîne ou une instance de la classe Bar, et dans d'autres cas, génère une erreur en TypeScript?

sobes.tech IA

Réponse de l'IA

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