Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Теперь любой строковый ключ допустим, а значение обязано быть числом. Присваивание строки становится ошибкой, и директива работает по назначению.
То же самое можно написать через индексную сигнатуру:
Record короче и лучше читается, а кроме того умеет то, чего индексная сигнатура не умеет: ограничивать набор ключей.
Первый аргумент не обязан быть string, туда можно передать union литералов:
Такой вариант заставляет заполнить все ключи и не пропустит лишний. Это удобно для таблиц соответствия: цвет для каждого статуса, подпись для каждой вкладки. Если добавится новый статус, компилятор покажет все места, где его забыли обработать.
С Record<string, ...> компилятор считает, что по любому ключу что-то есть, и это не так. Есть два способа быть честнее: опция noUncheckedIndexedAccess, которая добавляет undefined к результату, или явное Record<string, number | undefined>.
Тот же mapped type, что у Partial и Pick, только тип значения одинаковый для всех ключей.