typescript - "export as namespace foo"的目的是什么?

标签 typescript

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

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

declare var foo;

[...]

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

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

export = React;
export as namespace React;

declare namespace React {
[...]

React 命名空间不能导出:

export declare namespace React { [...]

?

最佳答案

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

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

脚本文件是没有export 的 typescript 文件或 import , 因此它可以在 <script src="yourFile.js"> 中使用在浏览器中。

请注意,这仅在您还导出某些内容时才有效,在本例中为 export = React告诉导出命名空间。

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

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

另见:

关于typescript - "export as namespace foo"的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554883/

相关文章:

node.js - 安装适用于 Windows 的 nvm : Visual Studio npm debug fails because of illegal characters in path

javascript - 如何在 Angular 10 中修补动态表单数组的值?

typescript - Vue + VUEX + typescript + Vue 路由器。组件未被销毁

typescript - 将对象数组映射到 typescript 中具有不同对象的另一个数组

typescript - REST - 强类型模型

angular - Firestore 从 Angular ​​获取单个数据

javascript - 这个使用 "as"的 Typescript 显式类型转换到底在做什么?

node.js - 使用 TypeScript 从 Sequelize 的响应中获取属性

javascript - D3 可折叠树 - 一次折叠一个级别

Angular 2 将所有输入和输出注入(inject)扩展组件