没有为不导出任何内容的TypeScript文件编写声明



我目前正在用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不允许非顶级declares。对我来说,在工具链中添加Webpack并在一个不使用任何依赖项的小脚本中添加更多膨胀是没有意义的。

实际上,我在尝试获取oojs-ui的类型时遇到了同样的问题,它做了同样的事情。不幸的是,我并不热衷于在测试中简单地将window.Foo设置为any,而是抱着最好的希望。

如何让TypeScript发出Foo类的声明,而不需要export语句?换句话说,如何将类的TypeScript导出声明附加到window变量?

我怀疑您缺少的是全局命名空间中的模块扩充。如果你按照这个答案中描述的方式添加你的类定义,它能解决你的问题吗?

类似操场

最新更新