混合"声明"和"出口"在相同的打字稿文件中

时间:2016-03-25 12:08:12

标签: typescript global-variables

  • 我有一个基于打字稿的项目
  • 当我构建这个打字稿项目时,我会得到一个bundle.js文件,然后我可以使用<script src="bundle.js"></script>
  • 导入任何地方
  • 我在声明一些全局变量的环境中导入我的捆绑打字稿代码。让我们来呼叫一个&#34; AGlobal&#34;
  • 在我的打字稿代码中,为避免出现编译错误,我将文件放在一边,我们可以调用declare.ts,如下所示:

declare.ts

declare var AGlobal:IAGlobal;
interface IAGlobal
{
// the aNumber argument can only be 0 or 1
aFunction(aNumber:number):void;
}

通过这种方式,我可以从任何ts文件中轻松访问该工具:

aFile.ts

import "/path/to/declare"
AGlobal.aFunction(42);

一切都会好的。

现在我遇到了以下问题,&#34; AGlobal&#34;实际上是在使用枚举,在这种情况下我应该重构declare.ts为:

declare.ts

declare var AGlobal:IAGlobal;
declare enum AState
{
ON = 1,
OFF= 0,
}
interface IAGlobal
{
aFunction(aNumber:AState):void;
}

我希望能够在aFile.ts中使用以下内容:

aFile.ts

import "/path/to/declare"
AGlobal.aFunction(AState.ON);

上面的代码没有生成任何错误但是当我编译它时,我意识到AState枚举从未添加到代码中,因此我在尝试使用AState时遇到了未定义的错误/ p>

因此,我考虑使用&#34; export enum AState&#34;导出枚举。但是这将打破整个文件的平面导入,即一个导出将打破整个文件的平面导入(因为ts然后将文件视为模块)

我怎么能从我的aFile.ts磁贴中导出或使​​用这个枚举?

1 个答案:

答案 0 :(得分:0)

实际上,当declaring填充时,typescript会假设这些东西在全球其他地方被声明,因此不负责重新声明它们。解决方案很简单,因为枚举只是打字稿的一部分(即使它在js上下文中仅与&#34; 0&#34;和#34; 1&#34;作为&#34; aFunction&的参数相关#34;)只在declare.ts文件中创建它们全局

简而言之,只需在界面前删除声明

declare.ts

declare var AGlobal:IAGlobal;
enum AState // <- no need for declare
{
ON = 1,
OFF= 0,
}
interface IAGlobal
{
aFunction(aNumber:AState):void;
}