Уничтожение ES6 в инструкции импорта

#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 или просмотрите старые протоколы собраний или журналы электронной почты с момента обсуждения спецификации