Sobes.tech
Middle+

Wie man eine Funktion mit Generics so gestaltet, dass sie nur eine Zeichenkette oder eine Instanz der Klasse Bar akzeptiert, und in anderen Fällen einen Fehler in TypeScript ausgibt?

sobes.tech KI

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