Выбор ответа 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 ждут те, кто проверяет объединение…

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

  1. false
  2. booleanправильный ответ
  3. never
  4. true

Разбор

T в условии стоит «голым», поэтому условный тип дистрибутивный: применяется к каждому члену объединения отдельно. string даёт true, number даёт false, результат true | false, а это и есть boolean.

false ждут те, кто проверяет объединение целиком: string | number действительно не подтип string, но так было бы только с [T] extends [string]. never получился бы для IsString<never>.

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

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