我正在使用Rollup从我的TypeScript源代码生成UMD模块。它是更大产品的一部分,因此一个组件导出到根命名空间(例如 mylib
),另一个导出到该命名空间下的嵌套命名空间(例如 mylib.plugins.myplugin
)。Rollup正在生成必要的UMD逻辑,从全局范围向下遍历并在需要时创建命名空间,但我无法在我的TypeScript d.ts
文件中建模这一点。
在第一个情况下,export as namespace
语法运行得很好,但在第二个情况下不行。看起来TypeScript不支持为此目的的嵌套命名空间。这是设计还是遗漏?
TypeScript版本: 2.7.0-dev.20180103
代码:两个文件,一个包含 export as namespace foo.bar
声明和引用它的脚本的 d.ts
。
- declaration.d.ts*
export var baz;
export as namespace foo.bar;
- app.ts*
console.log(foo.bar.baz);
使用以下命令编译:tsc .\test.d.ts .\main.ts
**预期行为:**文件正确编译为以下JS:
console.log(foo.bar.baz);
**实际行为:**错误
declaration.d.ts(3,24): error TS1005: ';' expected.
如果我将 declaration.d.ts
更改为使用 export as namespace foo
(并根据需要更新 app.ts
),则编译成功。
5条答案
按热度按时间sd2nnvve1#
同样的问题 - 尝试增强angular-translate。
它在这种情况下可以工作:
然而,对于angular-translate来说,没有可行的解决方案来将其导出为命名空间
angular.translate
ruyhziif2#
是否有推荐的解决方法?
iyfamqjs3#
你应该可以使用模块增强来代替。例如,如果你想要创建
angular.translate
,那么:gc0ot86w4#
我的临时解决方法是
结果是
Vendor.sdk.SDK
,这是我通过Webpack构建的。在SDK.ts
中写入export as namespace Vendor.sdk
会更好。6vl6ewon5#
我的临时解决方案是
结果是
Vendor.sdk.SDK
,这是我通过Webpack构建的。在SDK.ts
中写入export as namespace Vendor.sdk
会更好。关于这个问题:
在这种情况下,您可以避免将其设置为全局变量,而是在正常的ES6导入之后使用它。