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