Напиши тип Senior Условные и mapped-типы обновлено

Условный тип без распределения

Вопрос

Какой тип получится? Впишите тип.

type ToArr<T> = [T] extends [unknown] ? T[] : never;
type A = ToArr<string | number>; // /* ? */

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

Напишите тип, как написали бы в коде.

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

Коротко

Правильный тип: (string | number)[]. Условный тип распределяется по объединению, только если проверяемый тип это «голый» параметр (T extends ...).

Правильный тип

(string | number)[]

Разбор

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

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

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