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

Индекс number без as const

Вопрос

Какой тип у Role?

const roles = ['admin', 'user'];
type Role = (typeof roles)[number];

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

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

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

Коротко

Правильный ответ: string. Без as const массив выводится как string[]: литералы расширяются, ведь массив изменяемый.

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

  1. 'admin' | 'user'
  2. stringправильный ответ
  3. ['admin', 'user']
  4. string[]

Разбор

Без as const массив выводится как string[]: литералы расширяются, ведь массив изменяемый. Индекс [number] даёт тип элемента, то есть string.

'admin' | 'user' получится с const roles = ['admin', 'user'] as const, тогда тип массива readonly ['admin', 'user']. Кортеж и string[] это типы массива, а не элемента.

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

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