Sobes.tech
Middle+

Барои чӣ истифода мешаванд генерикҳо дар TypeScript? Чӣ гуна генерикро ба намудҳои муайян маҳдуд кардан мумкин аст? Type narrowing чист ва чӣ гуна амалӣ мешавад?

sobes.tech AI

Ҷавоб аз 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 помогает корректно работать с объединёнными типами.