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

Record с объединением ключей

Вопрос

Что скажет компилятор?

const t: Record<'ru' | 'en', string> = { ru: 'Привет' };

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

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

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

Коротко

Правильный ответ: Ошибка: нет ключа en. Record<K, V это { [P in K]: V }.

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

  1. Ошибка: нет ключа enправильный ответ
  2. Ошибка: Record принимает только string в ключах
  3. Всё компилируется, но t.en имеет тип never
  4. Всё компилируется: ключи в Record необязательны

Разбор

Record<K, V> это { [P in K]: V }. Для объединения литералов получаются обязательные поля ru и en. Без en объект не подходит. Это удобно для словарей переводов и обработчиков: пропуск ключа ловится сразу.

Чтобы ключи стали необязательными, пишут Partial<Record<...>>. В ключах Record можно использовать любые string | number | symbol, включая литералы.

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

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