Что такое контравариантность параметров функций?
УглублённыйСистема типовДженерики
- Параметры функций контравариантны: более широкий тип параметра → более узкий тип функции
(x: Animal) => void совместим с (x: Dog) => void? Нет — наоборот!
- Функция, принимающая
Event, НЕ может быть подставлена вместо функции, принимающей MouseEvent
strictFunctionTypes: true — включает строгую проверку контравариантности
- Без этого флага: бивариантность параметров (менее безопасно)
infer в контравариантной позиции даёт intersection, в ковариантной — union