Выбор ответа Middle Условные и mapped-типы спрашивают часто обновлено
Условный тип над объединением
Вопрос
Какой тип у R?
type IsString<T> = T extends string ? true : false;
type R = IsString<string | number>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: boolean. T в условии стоит «голым», поэтому условный тип дистрибутивный: применяется к каждому члену объединения отдельно. string даёт true, number даёт false, результат true false, а это и есть boolean. false ждут те, кто проверяет объединение…
Варианты ответа
falsebooleanправильный ответnevertrue
Разбор
T в условии стоит «голым», поэтому условный тип дистрибутивный: применяется к каждому члену объединения отдельно. string даёт true, number даёт false, результат true | false, а это и есть boolean.
false ждут те, кто проверяет объединение целиком: string | number действительно не подтип string, но так было бы только с [T] extends [string]. never получился бы для IsString<never>.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.