Typescript模块导入案例类是未定义的

时间:2012-11-27 19:54:55

标签: node.js typescript

我有两个文件

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?

2 个答案:

答案 0 :(得分:1)

看起来您可能会将外部模块(export / import)与“内部”module块混淆?导入声明应仅出现在文件的顶层。

答案 1 :(得分:0)

我认为问题是TS参考路径是包含,而不是导入。只要您不使用导入/导出,TS编译器就会将所有内容放在“全局模块”中,使用引用路径将其拼接在一起。

一旦开始在文件中使用导入/导出,该文件将被解释为其自己的模块,不再是全局模块的一部分。有关详细信息,请查看TS语言规范第9.1节。

所以,我怀疑 - 你开始在MyDataBase.ts中使用导入 - 你也需要将该文件作为外部模块导入(而不是仅仅引用它)。