如何在Typescript中导出具有其他名称的命名空间
How to export a namespace with another name in Typescript
假设我的Typescript代码使用第三方命名空间Foo
。
我想在Utility.Foo
模块中为这个模块编写一些实用函数。
问题是原始的Foo
将被隐藏在Utility.Foo
内部定义的函数中。
为了解决这个问题,我想写以下内容:
namespace Utility {
namespace _Foo {
export function bar() {
return Foo.x;
}
}
export {_Foo as Foo};
}
它将在ES3中被传送到
var Utility;
(function (Utility) {
var _Foo;
(function (_Foo) {
_Foo.bar = function () {
return Foo.x;
};
})(_Foo || (_Foo = {}));
Utility.Foo = _Foo;
})(Utility || (Utility = {}));
使用上面的代码,我得到错误
TS1194:命名空间中不允许导出声明
为什么会出现此错误?
实现这一目标的正确方法是什么(如果有的话)?
编辑
正如我在Paleo的回答中所评论的,如果我将我的实用函数直接定义到Utility.Foo
中,那么原始的Foo
模块就被有效地隐藏了。
为了理解原因,让我们看看以下Typescript代码:
var Foo = { x : 42 };
namespace Utility {
export namespace Foo {
export function bar() {
return Foo.x;
}
}
}
它被这样传输到ES3:
var Foo = { x: 42 };
var Utility;
(function (Utility) {
var Foo;
(function (Foo) {
function bar() {
return Foo.x;
}
Foo.bar = bar;
})(Foo = Utility.Foo || (Utility.Foo = {}));
})(Utility || (Utility = {}));
如果我们看看Utility.Foo模块是如何构建的,我们可以看到从bar
函数访问的Foo
实际上是Utility.Foo = {}
。所以bar
返回undefined
。
您可以将原始值保存在变量FooOrig
:中
var Foo = { x: 42 };
const FooOrig = Foo;
namespace Utility {
export namespace Foo {
export function bar() {
return FooOrig.x;
}
}
}
相关文章:
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- jQuery命名空间和使用“;这个“;
- 在Firebug控制台中监视javascript命名空间变量
- jQuery事件命名空间是否可以包含破折号
- 用自定义javascript全局命名空间替换窗口
- 如何在Typescript中导出具有其他名称的命名空间
- 从html文件中的脚本标记调用非全局命名空间函数
- 正在测量全局命名空间的污染
- 谷歌闭包命名空间冲突
- socket.io:断开连接事件 - “传输关闭”、“客户端命名空间断开连接”、“传输错误”和“强制关闭”
- 节点.js“需要”其他文件,而不需要命名空间