<script src="bundle.js"></script>
declare var AGlobal:IAGlobal;
interface IAGlobal
{
// the aNumber argument can only be 0 or 1
aFunction(aNumber:number):void;
}
通过这种方式,我可以从任何ts文件中轻松访问该工具:
import "/path/to/declare"
AGlobal.aFunction(42);
一切都会好的。
现在我遇到了以下问题,&#34; AGlobal&#34;实际上是在使用枚举,在这种情况下我应该重构declare.ts为:
declare var AGlobal:IAGlobal;
declare enum AState
{
ON = 1,
OFF= 0,
}
interface IAGlobal
{
aFunction(aNumber:AState):void;
}
我希望能够在aFile.ts中使用以下内容:
import "/path/to/declare"
AGlobal.aFunction(AState.ON);
上面的代码没有生成任何错误但是当我编译它时,我意识到AState
枚举从未添加到代码中,因此我在尝试使用AState
时遇到了未定义的错误/ p>
因此,我考虑使用&#34; export enum AState&#34;导出枚举。但是这将打破整个文件的平面导入,即一个导出将打破整个文件的平面导入(因为ts然后将文件视为模块)
我怎么能从我的aFile.ts磁贴中导出或使用这个枚举?
答案 0 :(得分:0)
实际上,当declaring
填充时,typescript会假设这些东西在全球其他地方被声明,因此不负责重新声明它们。解决方案很简单,因为枚举只是打字稿的一部分(即使它在js上下文中仅与&#34; 0&#34;和#34; 1&#34;作为&#34; aFunction&的参数相关#34;)只在declare.ts文件中创建它们全局
简而言之,只需在界面前删除声明:
declare var AGlobal:IAGlobal;
enum AState // <- no need for declare
{
ON = 1,
OFF= 0,
}
interface IAGlobal
{
aFunction(aNumber:AState):void;
}