在打字稿中,有这样的语法将模块的所有导出的“包”声明为 UMD 全局命名空间。来自文档:
export function isPrime(x: number): boolean;
export as namespace mathLib;
Run Code Online (Sandbox Code Playgroud)
这声明了一个 UMD 全局变量mathLib,作为该模块中所有“真实”导出的命名空间,因此我们可以编写以下内容:
<script>
mathLib.isPrime(2);
</script>
Run Code Online (Sandbox Code Playgroud)
现在我有一个带有默认导出的入口模块,我希望默认导出是这个命名空间。但我似乎无法让它发挥作用。例如:
我的模块.d.ts
interface MyType {
bar: number;
}
declare const Foo: MyType;
export default Foo;
Run Code Online (Sandbox Code Playgroud)
我想为此创建一个模块构建,以便它可以在其他模块环境中使用:
import Foo from 'my-module'
use(Foo.bar).someHow()
Run Code Online (Sandbox Code Playgroud)
...并且还希望此默认导出的类型是我可以指定名称的 UMD 全局类型Foo- 与默认导出的名称相同,以便在非模块脚本中使用我的模块的类型:
<script>
use(Foo.bar).someHow() // exactly the same
</script>
Run Code Online (Sandbox Code Playgroud)
对于我的 UMD 捆绑包,我已经使用该设置配置了 webpack output.library.export = 'default',因此实际上创建了一个完美的捆绑包,使得如上所述的使用成为可能。但我无法弄清楚如何完成任何类型,因为如果我写:
declare const Foo: MyType;
export default Foo;
+ export as namespace Foo;
Run Code Online (Sandbox Code Playgroud)
如果我编写以下内容,我只会在 IDE 中获得类型补全:
<script>
use(Foo.default.bar).someHow()
</script>
Run Code Online (Sandbox Code Playgroud)
从 TS 的角度来看,这确实有意义(毕竟,它为所有导出命名,包括默认导出),但显然是错误的且不受欢迎的。我找不到这方面的任何信息,这可能吗?
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |