我目前正在用TypeScript编写代码,并且没有使用像Webpack这样的库来捆绑代码。我在tsconfig.json
中将declaration
标志设置为true
,以要求TypeScript为代码生成声明。我正在window
对象上创建一个可访问的类,供外部脚本使用,目前我正在使用以下代码(Foo.ts
(:
(() => {
class Foo {
// ...
}
(window as any).Foo = Foo;
})();
当转换成JavaScript时,这就起作用了,Foo类可以在window
对象上找到。但是,声明文件(Foo.d.ts
(不包含任何内容。
我认为这是因为该文件没有导出任何内容,所以我更改了代码以导出变量(并将其放在顶层而不是闭包中(,它起到了作用。然而,具体到我的用例,";"出口";当脚本将被加载到浏览器中时(当然,除非我使用了类似Webpack的东西(。
到目前为止,这使我无法在集成测试中引用类类型。我不能简单地declare
这个变量来使用,因为它需要编写我自己的d.ts
文件(这违背了只使用TypeScript的目的(,也不能在现有Foo.ts
文件的中途声明它,因为TypeScript不允许非顶级declare
s。对我来说,在工具链中添加Webpack并在一个不使用任何依赖项的小脚本中添加更多膨胀是没有意义的。
实际上,我在尝试获取oojs-ui
的类型时遇到了同样的问题,它做了同样的事情。不幸的是,我并不热衷于在测试中简单地将window.Foo
设置为any
,而是抱着最好的希望。
如何让TypeScript发出Foo
类的声明,而不需要export
语句?换句话说,如何将类的TypeScript导出声明附加到window
变量?
我怀疑您缺少的是全局命名空间中的模块扩充。如果你按照这个答案中描述的方式添加你的类定义,它能解决你的问题吗?
类似操场