在声明之前使用的“Bar”类

时间:2018-01-10 13:46:01

标签: javascript function class typescript const

我有一个名为Bar的小组:

class Bar {
  private readonly foo: string;
  constructor() {
    this.foo = "foo";
  }
}

在我的主文件中,我试图像这样使用它:

const bar: Bar = new Bar();

但是这一行给了我错误:

  

在声明之前使用的“Bar”类。

我可以将它设为var并在函数内声明它,但我正在寻找一个更好的解决方案,它允许我将bar声明为常量。

问题是Typescript将项目编译成单个Javascript文件,该文件在尝试使用后声明了该类。

Altough @Fenton's solution运行正常。还有另一个:

tsconfig.json内,您可以输入:

"files": [
    "libs/Bar.ts",
],
"include": [
    "**/*"
]

这将告诉Typescript在其他人之前编译libs/Bar.ts

1 个答案:

答案 0 :(得分:2)

您可能需要向编译器提示其他文件是否存在,尽管这取决于您的IDE,因为有些人会自行解决这个问题。

///<reference path="./libs/Bar.ts" />

const bar: Bar = new Bar();

评论说明

  

这太丑了...... - Jonas W。

我的意见一直是你应该prefer modules, and module loaders over namespaces, and reference comments。自before they were called this以来我一直认为,但请记住,OP已经发表过这样的评论。

  

我不使用导出或导入,因为输出是针对es5的单个文件

现在 实际上仍然可以实现单个文件输出,目标是ES5,即使您使用导入编写模块,因为您可以使用其他工具将模块处理为单个文件,或者你可以使用像SystemJS或RequireJS这样的模块加载器 - 但是我们应该考虑我们应该在答案中引入多少主观性;尝试将每个有问题的人转换成我们自己的工作流程是多么恰当。

例如,I disagree with bundling an entire program into a single script文件*,通过让模块保持原样可以更好地提供 - 但我不会尝试回答每个webpack问题。

*我不同意捆绑当前被认为是最佳实践&#34;,基于过时的前提。