Middle+
TypeScriptте гана сап жана Bar классынын үлгүсүн кабыл алган жана башка учурларда катаны чыгаратган Generic менен функцияны кантип жасоого болот?
sobes.tech AI
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 выдавать ошибку при передаче неподходящего типа.