2017-03-16 34 views
0

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

爲什麼不嘗試呢? – SimpleJ

+0

這是一個你可以測試自己的腳本嗎?我認爲這只是一個對象。它會一直運輸。它會這樣做,因爲目前沒有瀏覽器對它有本地支持。 –

+0

@SimpleJ需要建立一個webpack項目或什麼的,我有工作要做大聲笑。我想在這裏問可能可以幫助別人誰問同樣的問題或什麼。 –

回答

2

是的,它是一個對象(而不是調用),所以typeof將產生"object"

但是,它不是一個普通的對象,它是一個奇異的module namespace object。它不從Object.prototype繼承,它不是extensible,它的所有屬性都是不可寫的getter,它們解析爲導出的綁定。您的轉譯器/模塊加載器可能無法完全模擬此過程。

+0

正是我正在尋找。感謝規範參考 –

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(); 
相關問題