什么类型`导入*作为来自' ...'`make?

时间:2017-03-16 22:31:18

标签: javascript es6-module-loader es6-modules

import * as MyModule from 'module-name'创建的是哪种类型?

我假设它是一个普通的javascript对象,其中的键是导出值的名称,但我不确定。

示例:

./module-that-exports.js

export const a = 'foo';
export const b = 'bar';

./module-that-imports.js

import * as thing from './module-that-exports';

typeof thing; // what does this print? what is its type?

具体来说,我使用的是webpack。我不知道这是否有所作为。

2 个答案:

答案 0 :(得分:2)

是的,它是一个对象(而不是可调用的),因此typeof会产生"object"

然而,它不是一个普通的对象,它是一个充满异国情调的module namespace object。它不从Object.prototype继承,它不是extensible,并且它的所有属性都是不可写入的getter,可以解析为导出的绑定。您的转发器/模块加载器可能无法完全模拟它。

答案 1 :(得分:1)

所以,让我们说你有一个文件:

const doSomething = () => console.log('hello');
const doSomethingElse = () => console.log('world');

export default {
    doSomething,
    doSomethingElse
}

并且您有另一个使用它的文件。您不想为所有字段命名,因此您不必将其分组到对象中。

import * as something from './doSomething'

这将创建一个包含两个函数的对象..

console.log(something);

将打印:

{
    doSomething: function() { ... }
    doSomethingElse: function() { ... }
}

这样做的好处是您不需要长时间导入,只需使用something对象。

something.doSomething();
something.toSomethingElse();