我有两个文件
app.js
///<reference path='mongodb.d.ts'/>
///<reference path='MyDatabase.ts'/>
module MyModule {
import mongodb = module("mongodb");
new mongodb.Server();
var db = new MyDatabase(); // this will not work with first import line in Database.js, but work with second
}
MyDatabase.js
///<reference path='mongodb.d.ts'/>
import mongodb = module("mongodb"); // adding this line here, will cause that app.js will not see MyDatabase class
module MyModule {
import mongodb = module("mongodb"); // adding this line this will cause that classes in this module cant use mongodb
export class MyData {
_id: mongodb.Id; // second import line will cause this to be compilation error, with first line it works
}
export class MyDatabase {
public test(): void {
//with second line i can access mongodb here
}
}
}
所以问题是,我错过了什么?我该如何进口mongodb?
答案 0 :(得分:1)
看起来您可能会将外部模块(export
/ import
)与“内部”module
块混淆?导入声明应仅出现在文件的顶层。
答案 1 :(得分:0)
我认为问题是TS参考路径是包含,而不是导入。只要您不使用导入/导出,TS编译器就会将所有内容放在“全局模块”中,使用引用路径将其拼接在一起。
一旦开始在文件中使用导入/导出,该文件将被解释为其自己的模块,不再是全局模块的一部分。有关详细信息,请查看TS语言规范第9.1节。
所以,我怀疑 - 你开始在MyDataBase.ts
中使用导入 - 你也需要将该文件作为外部模块导入(而不是仅仅引用它)。