2017-03-16 2 views
0

import * as MyModule from 'module-name'はどのようなタイプのものを作成しますか?どのようなタイプの `import * 'は' ... '` makeからのものですか?

私はそれがエクスポートされた値の名前であるキーを持つ通常の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

なぜそれを試してみませんか? – SimpleJ

+0

それは自分でテストできるスクリプトですよね?私はそれがただの目的だと思う。そして、それは蒸留されている限り長くなります。どちらのブラウザでも、現在ネイティブでサポートされているブラウザがないためです。 –

+0

@SimpleJはWebpackプロジェクトや何かをセットアップする必要があり、私は笑をする仕事があります。私はここで、同じ質問や何かを聞いている誰かを助けることができると思った。 –

答えて

2

はい、それはオブジェクト(および呼び出し可能ではない)ですので、typeof"object"を得られます。

しかし、普通のオブジェクトではありません。エキゾチックなmodule namespace objectです。 Object.prototypeを継承せず、extensibleではなく、そのすべてのプロパティは、エクスポートされたバインディングに解決される書き込み不可能なゲッターです。あなたのトランスバータ/モジュールローダーはこれを完全にエミュレートすることができないかもしれません。

+0

私が探していたもの。仕様参照のおかげで –

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(); 
関連する問題