Выбор ответа Senior Дженерики обновлено

Аннотации вариантности in и out

Вопрос

Что означает interface Producer<out T> { get(): T } (TS 4.7+)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Producer явно объявлен ковариантным по T, и TS это проверит. out означает ковариантность (T только «выходит»), in контравариантность, in out инвариантность.

Варианты ответа

  1. Поле типа T становится доступным только для чтения в рантайме
  2. Producer явно объявлен ковариантным по T, и TS это проверитправильный ответ
  3. Это синтаксис значения параметра типа по умолчанию, как T = unknown
  4. Producer становится контравариантным по T: T можно только передать

Разбор

out означает ковариантность (T только «выходит»), in контравариантность, in out инвариантность. TS проверит, что объявление действительно соответствует аннотации, и использует её при сравнении типов, что ускоряет проверку сложных рекурсивных типов. На рантайм аннотации не влияют, к значениям по умолчанию отношения не имеют, а out это ковариантность, а не контравариантность.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме