intermediate

Generics и constraints

Сохраняйте связь между input и output, ограничивая требуемые capabilities через extends.

Generics описывают relationships между значениями без стирания specific types. Generic identity сохраняет тот же input/output type. Constraints через `extends` разрешают нужные operations, сохраняя caller-specific shape.

					function getId<T extends { id: string }>(value: T): string {
  return value.id;
}
				

Используйте generics, когда caller должен получить информацию, связанную с input. Generic, встречающийся один раз, часто лишний. Слишком broad constraints теряют safety; слишком narrow делают helper unusable.

На интервью: сравните `<T>` с `unknown` и объясните, когда inference должен работать сам.

Типовые ошибки: путать похожие API и забывать edge cases в live coding.

Компромисс часто между ясностью и безопасностью или expressiveness и maintainability. Чеклист:

  • Сохраняйте input-output relationships.
  • Ограничивайте только required operations.
  • Позволяйте inference работать.