31 / 58
Что такое ковариантность и контравариантность?
Ковариантность -- подтип можно использовать вместо базового типа (массив Dog[] подходит туда, где ожидается Animal[]). Контравариантность -- наоборот, базовый тип можно использовать вместо подтипа (функция (a: Animal) => void подходит туда, где ожидается (d: Dog) => void). Это определяет, как подтипизация работает для составных типов -- массивов, функций, промисов.