Выбор ответа Senior Дженерики обновлено
Аннотации вариантности in и out
Вопрос
Что означает interface Producer<out T> { get(): T } (TS 4.7+)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Producer явно объявлен ковариантным по T, и TS это проверит. out означает ковариантность (T только «выходит»), in контравариантность, in out инвариантность.
Варианты ответа
- Поле типа T становится доступным только для чтения в рантайме
- Producer явно объявлен ковариантным по T, и TS это проверитправильный ответ
- Это синтаксис значения параметра типа по умолчанию, как
T = unknown - Producer становится контравариантным по T: T можно только передать
Разбор
out означает ковариантность (T только «выходит»), in контравариантность, in out инвариантность. TS проверит, что объявление действительно соответствует аннотации, и использует её при сравнении типов, что ускоряет проверку сложных рекурсивных типов. На рантайм аннотации не влияют, к значениям по умолчанию отношения не имеют, а out это ковариантность, а не контравариантность.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.