Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Generics?
Generics (обобщённые типы) — это способ написать функции, классы и интерфейсы, которые работают с разными типами, но сохраняют type safety.
Базовый пример:
// БЕЗ Generics (теряем type safety)
function getFirstElement(arr: any[]): any {
return arr[0];
}
const result = getFirstElement([1, 2, 3]);
const type = result.toUpperCase(); // ERROR! number doesn't have toUpperCase()
// С Generics (сохраняем type safety)
function getFirstElement<T>(arr: T[]): T {
return arr[0];
}
const result = getFirstElement([1, 2, 3]); // result: number
const type = result.toUpperCase(); // ERROR на compile-time!
Как это работает:
<T> — это type parameter, он "запомнит" какой тип передали. Если передали number[], T будет number. Если string[], T будет string.
Примеры в реальном коде:
1. Функция с Generics
function identity<T>(value: T): T {
return value;
}
identity<number>(42); // OK
identity<string>("hi"); // OK
identity<string>(42); // ERROR!
2. Интерфейс с Generics
interface Box<T> {
value: T;
}
const numberBox: Box<number> = { value: 42 };
const stringBox: Box<string> = { value: "hi" };
3. Класс с Generics
class Repository<T> {
private items: T[] = [];
add(item: T) {
this.items.push(item);
}
getAll(): T[] {
return this.items;
}
}
const userRepo = new Repository<User>();
userRepo.add(newUser); // OK
userRepo.add("string"); // ERROR!
4. Constraints (ограничения)
function merge<T extends object>(a: T, b: T): T {
return { ...a, ...b };
}
merge({x: 1}, {y: 2}); // OK
merge("string", 123); // ERROR! string не extends object
Практическое применение:
// API response wrapper
type ApiResponse<T> = {
success: boolean;
data?: T;
error?: string;
};
const userResponse: ApiResponse<User> = {
success: true,
data: {id: 1, name: "John"}
};
const postsResponse: ApiResponse<Post[]> = {
success: true,
data: [{id: 1, title: "Hello"}]
};
Когда используется:
- Collections (Array<T>, Set<T>, Map<K, V>)
- API responses
- Database queries
- Utility functions
Совет:
Generics — это мощный инструмент для переиспользуемого, type-safe кода. Это особенно important в TypeScript где type safety — главное преимущество.