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