Разрушающее присваивание в операторах импорта
В соответствии с этим источником и смутным воспоминанием о том, что где-то подобное использовалось в проекте, мне любопытно, смог ли кто-нибудь сделать следующее:
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')