2017-01-30 43 views
5

閱讀this manual後和這句話的區別:之間有什麼`聲明namespace`和`聲明module`

需要注意的是,在打字稿1.5是很重要的,命名了 改變。 「內部模塊」現在是「命名空間」。 「外部模塊」 現在只是「模塊」

我下的印象是不再使用declare module,由declare namespace取代,然而探索node_modules\@types\node\index.d.ts時,我可以看到,無論declare moduledeclare namespace用於:

declare namespace NodeJS { 
    export var Console: { 
     prototype: Console; 
     new(stdout: WritableStream, stderr?: WritableStream): Console; 
    } 
... 

declare module "buffer" { 
    export var INSPECT_MAX_BYTES: number; 
    var BuffType: typeof Buffer; 
    var SlowBuffType: typeof SlowBuffer; 
    export { BuffType as Buffer, SlowBuffType as SlowBuffer }; 
} 

爲什麼這麼說?有什麼不同?

外部模塊(ES6模塊)不要求在這裏發揮作用,據我瞭解。

+0

對於您在帖子中的鏈接中的兩個段落,都有一個簡短的定義。基本上命名空間是Typescripts實現模塊模式的方式。雖然模塊現在與ES2015模塊相同。聲明部分意味着兩者都預計會出現並由其他人定義。 :) – toskv

+0

@toskv,是的,我肯定讀過我鏈接到的頁面。但它很混亂,這就是爲什麼我在這裏發佈問題 –

+0

@toskv,我有正確的答案,請參閱[我的答案](http://stackoverflow.com/a/42030656/2545680) –

回答

3

有在TS指定模塊的方法有兩種:

declare module "buffer" {} // with quotes 

declare module buffer {} // without quotes 

前者(帶引號)表示外部模塊(ES6模塊),目前在.d.ts文件中用於把幾個ES6模塊放在一個文件中:

declare module "buffer" {} 
declare module "fs" {} 

後者(wi thout報價)作爲命名空間,現在與

declare namespace buffer {} 

所以更換,這句話:

需要注意的是在打字稿1.5是很重要的,命名了 改變。 「內部模塊」現在是「命名空間」。 「外部模塊」 現在是簡單的「模塊」

「內部模塊」是不帶引號的模塊,因爲他們之前1.5使用。

請參閱this issue瞭解更多詳情。

+1

何時使用'declare namespace xxx {}'? – novaline

+0

@novaline,勾選[this](https://www.typescriptlang.org/docs/handbook/namespaces.html)。命名空間本質上是JS中的「Revealing Module Pattern」。你可以詢問一個單獨的問題以獲取更多詳細信息,並在此處參考 –

+1

我閱讀了官方文檔,但文檔解釋不清楚。我知道'declare module'xxx'{}'的使用。但是仍然不知道何時使用'declare namespace xxx {}','es6 module system'和全局'script'標籤有什麼關係? – novaline

相關問題