Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
keyof T даёт объединение ключей, T[keyof T] объединение типов всех полей. Для { хлеб: number; молоко: number } пары получаются ["хлеб" | "молоко", number], и price теперь число.
Object.entries в стандартной библиотеке возвращает [string, ...][], и это не случайность. TypeScript сравнивает типы по структуре, поэтому у объекта в рантайме может оказаться больше полей, чем видно в типе:
Поэтому стандартная библиотека не обещает точных ключей. Наш as означает: «я знаю, что сюда передают объекты ровно того типа, который виден». Для литералов и своих данных это обычно правда, но это допущение, а не гарантия.
Обрати внимание, что тип [keyof T, T[keyof T]] не связывает конкретный ключ с его значением:
Связать ключ и значение в каждой паре можно через mapped type, но это уже продвинутый приём. Для большинства задач, вроде суммирования или вывода списка, такой точности хватает.