Выбор ответа Middle Условные и mapped-типы обновлено

Как отключить распределение

Вопрос

Какой тип у B?

type ToArrayOne<T> = [T] extends [any] ? T[] : never;
type B = ToArrayOne<string | number>;

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

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

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

Коротко

Правильный ответ: (string number)[]. Обёртка в кортеж [T] extends [any] делает проверяемый тип не «голым» параметром, и распределение отключается.

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

  1. [string | number][]
  2. never
  3. string[] | number[]
  4. (string | number)[]правильный ответ

Разбор

Обёртка в кортеж [T] extends [any] делает проверяемый тип не «голым» параметром, и распределение отключается. Условие проверяется для объединения целиком, результат (string | number)[].

string[] | number[] даёт дистрибутивная версия T extends any ? T[] : never. Кортеж в результат не попадает: [T] используется только в условии. never тут неоткуда.

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

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