`declare namespace`和`declare module`之间有什么区别?
`declare namespace`和`declare module`之间有什么区别?
阅读了这篇手册和这句话后:
需要注意的是,在TypeScript 1.5中,术语已经发生了变化。“内部模块”现在被称为“命名空间”。而“外部模块”则简称为“模块”。
我原以为declare module
不再使用,而是被declare namespace
所取代,但是当我探索node_modules\@types\node\index.d.ts
时,我发现既有declare module
也有declare 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模块)。
TypeScript中有两种指定模块的方式:
declare module "buffer" {} // 使用引号
和
declare module buffer {} // 不使用引号
前者(使用引号)表示外部模块(ES6模块),目前在.d.ts
文件中使用,将几个ES6模块放在一个文件中:
declare module "buffer" {} declare module "fs" {}
后者(不使用引号)曾用作命名空间,现在已被替换为
declare namespace buffer {}
因此,在这段引述中:
重要的是要注意,在TypeScript 1.5中,术语已经改变。“内部模块”现在是“命名空间”。“外部模块”现在只是“模块”
“内部模块”是没有引号的模块,它们在1.5之前被使用。
有关更多详细信息,请参见此问题。
何时使用declare namespace xxx {}
?
,查看这里。命名空间本质上是JS中的“揭示模块模式”。您可以提出一个单独的问题,以获取更多详细信息,并在此处引用它。
我阅读了官方文档,但文档解释得不够清楚。我知道如何使用declare module 'xxx' {}
。但仍然不知道何时使用declare namespace xxx {}
,以及es6模块系统
和全局script
标签之间的关系是什么?
,没问题,那就提出一个单独的问题。社区比我知道得多。
还有export =
和export as namespace React
。不知道什么时候使用。如果有一些示例来解释这些,我将非常感激!
,抱歉,这些都是与我回答的问题不太相关的问题,提出单独的问题,我会看一下
我认为这个回答没有解答问题。`declare module`和`declare namespace`有什么区别?它们是否做相同的事情?两者都可以使用引号和不使用引号。