Поиск ошибки при копировании Map в JavaScript

Spread {...storage} создаёт обычный объект, а не Map. Поэтому у результата нет метода get; корректная поверхностная копия — new Map(storage).

Короткий ответ

Что ответить на собеседовании

Spread {...storage} создаёт обычный объект, а не Map. Поэтому у результата нет метода get; корректная поверхностная копия — new Map(storage).

Подробный разбор

Ответ с пояснениями

Условие

В этом задании требуется выявить проблему в приведённом фрагменте кода.

type Metadata = {}

type UserMetadata = Map<string, Metadata>;

const storage: UserMetadata = new Map();

console.log(storage.get('foo'));

const storageCopy: UserMetadata = {...storage};

console.log(storageCopy.get('foo'));

Обратите внимание, что используется оператор распространения для копирования карты. Определите, почему второй вызов get приводит к ошибке и как правильно скопировать структуру Map.

Ответ

Spread {...storage} создаёт обычный объект, а не Map. Поэтому у результата нет метода get; корректная поверхностная копия — new Map(storage).

const storageCopy: UserMetadata = new Map(storage);

Первый get пустой Map возвращает undefined. Новая Map имеет независимый набор записей, но объектные значения Metadata остаются общими ссылками. TypeScript-аннотация не способна превратить обычный объект в Map во время выполнения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее