Middle+
Jak udělat, aby funkce s generikem přijímala pouze řetězec nebo instanci třídy Bar, a v ostatních případech vyhazovala chybu v TypeScriptu?
sobes.tech AI
Odpověď od 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 выдавать ошибку при передаче неподходящего типа.