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 работать.