#javascript #ecmascript-6
#javascript #ecmascript-6
Вопрос:
Есть ли какой-либо способ написания этого кода:
import {o} from 'lib'
let {a, b} = o
… как однострочник, подобный этому:
import {o: {a, b}} from 'lib'
Приведенный выше оператор выдает ES2015 named imports do not destructure. Use another statement for destructuring after the import.
Это легко, let {o: {a, b}} = require('lib')
но кажется невозможным в ES6, правильно?
Комментарии:
1. Это невозможно
2. это «поведение»,
{foo} from 'myModule'
, уже «назначено» для именованного импорта, поэтому вы не можете его разрушить, даже если синтаксис почти такой же. Как бы вы отличили его друг от друга? Это было запрошено / обсуждалось годами.3. Хорошо, спасибо! Я не понимаю, почему дифференциация в этом случае отличается от обычной деструктуризации (например, при использовании
require
). В случае конфликта имен вам придется переименовать его как обычно:let {o: {a: oa, b}, a} = require('lib')
Ответ №1:
Нет, это невозможно, потому что это запрещено спецификацией ECMAScript
Комментарии:
1. Есть ли шанс, что вы знаете или имели какое-либо представление о том, какой компромисс делает его запрещенным? Просто любопытно.
2. Понятия не имею, но вы можете посмотреть на саму спецификацию здесь: 262.ecma-international.org или просмотрите старые протоколы собраний или журналы электронной почты с момента обсуждения спецификации