Выбор ответа Senior Задачи на типы обновлено

Почему extends не проверяет равенство

Вопрос

Почему type Eq<A, B> = A extends B ? true : false не годится для проверки равенства типов?

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

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

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

Коротко

Правильный ответ: extends проверяет совместимость: подтип с лишними полями даст true. A extends B значит «A можно присвоить в B».

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

  1. extends проверяет совместимость: подтип с лишними полями даст trueправильный ответ
  2. extends нельзя использовать с двумя параметрами типа одновременно
  3. extends всегда возвращает boolean, а не литералы true и false
  4. extends работает только с примитивами, а объекты сравнивает по ссылке

Разбор

A extends B значит «A можно присвоить в B». Подтип с лишними полями присваивается, поэтому ответ true при разных типах. К тому же голый A распределяется по объединению. Для точного равенства используют приём со сравнением дженерик-функций: (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2).

extends работает с любыми типами и любым числом параметров. Результат определяется ветками, а не всегда boolean.

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

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