2017-06-14 28 views
2

我使用一些* .d.ts文件,我看到很多人以下兩行:「導出爲命名空間foo」的目的是什麼?

//foo.d.ts 
export = foo; 
export as namespace foo; 

declare var foo; 

[...] 

我可以理解,在前者(出口= FOO),OOF是事出口。但是,作爲命名空間foo導出的含義是什麼?應該如何從外部消費或使用?

在的情況下發生反應的環境declaratin文件,它說:

出口申報命名空間陣營{[...]

export = React; 
export as namespace React; 

declare namespace React { 
[...] 

無法將做出反應命名空間與出口

+1

您閱讀前人的精力此:https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript# support-for-umd-module-definitions – cyrix

+0

所以,如果你把export作爲命名空間,那麼文件中的所有全局東西就會從外部看到,就像它在命名空間中定義的一樣。同時,如果你不使用模塊,你可以直接訪問所有的全局變量。對? –

+0

不是全部,而是通過這個命名空間導出的所有內容(如果您將它用作UMD模塊)。 – cyrix

回答

0

下面是我根據這個文檔的理解:https://www.typescriptlang.org/docs/handbook/modules.html#umd-modules

當你在聲明文件寫export as namespace React;(* .d.ts),你是在告訴React可用於訪問導出的內容作爲整個腳本文件中的全局變量。

腳本文件是一個打字稿文件,沒有exportimport,所以它可以用在例如瀏覽器內的<script src="yourFile.js">內。

請注意,這隻適用於如果您還導出某些內容,在這種情況下export = React告訴導出命名空間。

export declare namespace React是不等價的,因爲commonJs不會導出爲default,對於腳本文件它只是不起作用(不會將名稱空間添加到全局變量中)。

對於你自己的模塊,如果你希望只使用commonjs我建議避免使用名稱空間,只需使用export ...export default ...如果你只有一個出口。

參見: