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

Mapped-тип над кортежем

Вопрос

Какой тип у T2?

type Box<V> = { value: V };
type Boxed<T> = { [K in keyof T]: Box<T[K]> };
type T2 = Boxed<[string, number]>;

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

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

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

Коротко

Правильный ответ: [Box<string, Box<number]. Гомоморфный mapped-тип, применённый к массиву или кортежу, возвращает массив или кортеж той же формы: преобразуются только элементы.

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

  1. { 0: Box<string>; 1: Box<number>; length: Box<2> }
  2. [Box<string>, Box<number>]правильный ответ
  3. Box<string | number>[]
  4. Box<[string, number]>

Разбор

Гомоморфный mapped-тип, применённый к массиву или кортежу, возвращает массив или кортеж той же формы: преобразуются только элементы. Получается [Box<string>, Box<number>].

Объект с ключами 0, 1 и length ждут те, кто думает, что mapped-тип обходит кортеж как обычный объект, но для гомоморфного mapped-типа над массивом это не так. Объединение и обёртка целиком не соответствуют поэлементному преобразованию.

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

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