我有一个名为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
。
答案 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;,基于过时的前提。