【问题标题】:what is the purpose of "export as namespace foo"?“导出为命名空间 foo”的目的是什么?
【发布时间】:2022-04-28 00:27:53
【问题描述】:

我正在使用一些 *.d.ts 文件,我在其中许多文件中看到以下两行:

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

declare var foo;

[...]

我可以理解,在前一个(export = foo)中,foo 是导出的东西。但是export as namespace foo是什么意思呢?应该如何从外面消费或使用?

在反应环境声明文件的情况下,它说:

export = React;
export as namespace React;

declare namespace React {
[...]

不能用以下方式导出 React 命名空间:

export declare namespace React { [...]

?

【问题讨论】:

  • 因此,如果您将导出作为命名空间,则文件中的所有全局内容都将从外部看到,就像在命名空间中定义一样。同时,如果您不使用模块,您将可以直接访问所有全局变量。对吗?
  • 不是全部,而是通过此命名空间导出的所有内容(如果您将其用作 UMD 模块)。

标签: typescript


【解决方案1】:

这是我根据此文档了解的内容:https://www.typescriptlang.org/docs/handbook/modules.html#umd-modules

当您在声明文件 (*.d.ts) 中写入 export as namespace React; 时,您是在告诉 React 可用于访问整个导出的内容作为脚本文件中的全局变量。

脚本文件是没有exportimport 的打字稿文件,因此它可以用于例如浏览器内的<script src="yourFile.js">

请注意,这仅在您还导出某些内容时才有效,在这种情况下,export = React 告诉您导出命名空间。

export declare namespace React 不等效,因为对于 commonJs,它不会导出为 default,而对于脚本文件,它只是不起作用(不将命名空间添加到全局变量中)。

如果您希望只使用commonjs,那么对于您自己的模块,我建议您避免使用命名空间,如果您只有一个导出,则只使用export ...export default ...

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2014-11-02
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多