Разрушающее присваивание в операторах импорта

В соответствии с этим источником и смутным воспоминанием о том, что где-то подобное использовалось в проекте, мне любопытно, смог ли кто-нибудь сделать следующее:

import {map: { series }} from 'contra'

Как указано в этом обзоре присвоения деструктуризации:

Оператор импорта в ES6 ведет себя аналогично деструктуризации, но важно отметить, что на самом деле это не деструктуризация.

Похоже, что импорт работает немного по-другому, и, возможно, нельзя ожидать такого же точного поведения, но я не смог проверить статус этого. Что я пытаюсь сделать частью официальной спецификации ECMAScript 6/7?

В попытке ответить на этот вопрос, пожалуйста, включите (или ссылку) часть спецификации, которая проясняет эту проблему.

2 ответа

Решение

Соответствующая часть спецификации здесь.

ImportDeclaration является

import ImportClause FromClause;

Если вы изучите ImportClause, вы увидите, что это просто знакомый * as Foo, или же DefaultImport, или же {ImportSpecifier, ...} и т. д., где ImportSpecifier - это ImportBinding, который, в свою очередь, представляет собой BindingIdentifer, который представляет собой просто старый идентификатор.

Запись MDN находится где-то между вводящей в заблуждение и совершенно неправильной. Он должен был сказать (и теперь говорит):

Оператор импорта в ES6 имеет внешнее сходство с деструктуризацией, но на самом деле совершенно не связан.

В эти дни я нахожу все больше и больше неверной и вводящей в заблуждение информации в MDN. Это должно быть взято с зерном соли. Авторитетная ссылка - спец.

Вы можете использовать деструктурирующее присваивание только при назначении переменных. Импорт - это совершенно другая вещь, и вы не можете использовать деструктурирующее назначение с ними.

Вместо этого вы можете использовать деструктурирующее назначение с прямым require() вызов (при условии, что вы используете Node.js или RequireJS):

const {map: { series }} = require('contra')
Другие вопросы по тегам