使用“ import * as”和分解时的意外行为

时间:2019-12-12 19:58:18

标签: javascript node.js ecmascript-6

文件如下:

-test
--index.js
--test1.js
--test2.js

test1.js:

export const val1 = "TEST 1";
export const val2 = "TEST 2";
export const val3 = "TEST 3";
export const val4 = "TEST 4";

test2.js:

export const val5 = "TEST 5";
export const val6 = "TEST 6";
export const val7 = "TEST 7";
export const val8 = "TEST 8";

index.js:

import * as test1 from "./test1";
import * as test2 from "./test2";

export default { ...test1, ...test2 };

在另一个文件中:

import { val6 } from "./test";

变量var6未定义。

但是,如果我这样做:

import test from "./test";
const { val6 } = test;

然后定义了var6,它等于“ TEST 6”。

test1和test2对象具有键__esModule: true

我不明白为什么会这样。为什么在第一个示例中未定义var6?

1 个答案:

答案 0 :(得分:3)

如注释中所述,您正在创建一个默认导出的对象文字,它与命名导出不同(它导致test引用合并的对象,但除{{ 1}})。看来您实际上正在寻找的是

default

有了它,您就可以使用

// index.js:
export * from "./test1";
export * from "./test2";