Для чего используются дженерики (Generics) в TypeScript? Как ограничить дженерик определёнными типами? Что такое type narrowing и как оно реализуется?
Ответ от нейросети
sobes.tech AI
Дженерики в TypeScript позволяют создавать компоненты, функции и классы, которые работают с разными типами данных, сохраняя при этом типовую безопасность. Это повышает переиспользуемость кода и предотвращает ошибки типов.
Чтобы ограничить дженерик определёнными типами, используют ключевое слово extends. Например:
function merge<T extends object, U extends object>(obj1: T, obj2: U): T & U {
return {...obj1, ...obj2};
}
Здесь T и U ограничены типом object, что не позволит передать, например, примитивы.
Type narrowing — это механизм сужения типа переменной в процессе выполнения кода, благодаря проверкам типа. TypeScript анализирует условия и уточняет тип, что позволяет безопасно работать с переменной.
Пример реализации type narrowing:
type Fish = { swim: () => void };
type Bird = { fly: () => void };
function move(animal: Fish | Bird) {
if ('swim' in animal) {
animal.swim(); // TypeScript знает, что animal — Fish
} else {
animal.fly(); // Здесь animal — Bird
}
}
Таким образом, дженерики обеспечивают гибкость и безопасность типов, а type narrowing помогает корректно работать с объединёнными типами.