问题 命名导出vs导出对象


为什么这样做:

const str = 'stuff';
export {
  str
};

但不是这个:

export default {
  str: 'stuff'
};

我想将其导入如下:

import { str } from 'myLib';

我想直接在导出中分配值,而不需要事先创建变量。

当我尝试时:

export {
  str: 'stuff'
};

我收到错误:

SyntaxError: /home/karlm/dev/project/ex.js: Unexpected token, expected , (41:5)
  39 | 
  40 | export {
> 41 |   str: 'stuff'
     |      ^
  42 | };
  43 | 

1137
2017-12-22 12:58


起源

这就是导出语法的工作原理。它 容貌 喜欢对象解构,我想这就是为什么你期望能够导出一个 目的,但这两个概念根本不同。相关阅读: stackoverflow.com/questions/33524696/... - CodingIntrigue
种类相关: ES6解构和模块导入 - Felix Kling
还有关系: Javascript(ES6),导出const vs导出默认值 - Felix Kling


答案:


ES6中有两种出口形式 - “正常”出口和默认出口。正常导出使用以下语法导出:

export const str = 'stuff';
// or
const str = 'stuff';
export {str};

默认导出如下:

export default const str = 'stuff';
// or 
export default {
  str: 'stuff'
};

导入时会显示差异。首先,你需要包括大括号:

import {str} from 'myModule'; // 'stuff', from the first example

没有大括号,它会导入默认导出:

import myModule from 'myModule'; //  {str: 'stuff'}, from the second example

10
2017-12-22 13:08



更新了我关于你的第一部分的问题,我收到了一个错误。 - Karl Morrison
对不起这是我的错。编辑。 - Scimonster
实际上你不能默认导出变量声明。 export default const str = 'stuff'; 是无效的。 - Qwerty


主要原因是 出口声明 用于从给定文件(或模块)导出函数,对象或基元。

但是您需要一个标识符才能导出(以便可以通过它导入它) import 在另一个脚本)。

你可以简单地做:

export const obj = {
  str: 'stuff'
};

在此期间 进口,您将能够使用相同的名称 obj 引用相应的值。

并导入它像:

import { obj } from 'myLib';

0
2017-12-22 13:02