Выбор ответа Junior Утилитарные типы обновлено
Record с объединением ключей
Вопрос
Что скажет компилятор?
const t: Record<'ru' | 'en', string> = { ru: 'Привет' };
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: нет ключа en. Record<K, V это { [P in K]: V }.
Варианты ответа
- Ошибка: нет ключа
enправильный ответ - Ошибка:
Recordпринимает толькоstringв ключах - Всё компилируется, но
t.enимеет типnever - Всё компилируется: ключи в
Recordнеобязательны
Разбор
Record<K, V> это { [P in K]: V }. Для объединения литералов получаются обязательные поля ru и en. Без en объект не подходит. Это удобно для словарей переводов и обработчиков: пропуск ключа ловится сразу.
Чтобы ключи стали необязательными, пишут Partial<Record<...>>. В ключах Record можно использовать любые string | number | symbol, включая литералы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.