如何将具有自定义类型的属性添加到Node的Global界面

时间:2017-03-12 22:59:38

标签: typescript

我无法弄清楚如何将MongoDB的Db类型的属性添加到Node的Global接口。这是我现在拥有的:

// file vendor.d.ts
/// <reference types="mongodb" />

declare namespace NodeJS{
  interface Global {
    db: Db
  }
}

我收到以下编译错误:

vendor.d.ts(5,9): error TS2304: Cannot find name 'Db'.

如果我将类型更改为string甚至Buffer,则不会出现错误。另外,我可以很好地访问其他代码中的Db类型。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这是因为你错误地使用了mongodb类型的声明

试试这个

import  {Db} from 'mongodb';

declare global {
  namespace NodeJS {
    interface Global {
      // Always name constructors with an initial capital letter.
      Db: typeof Db;
    }
  }
}

请注意,通过添加顶级import,我们更改了导入文件的源类型/目标,使其成为模块。这也是必要的declare global块包装声明的必要条件。在模块内部,所有声明都以词法范围限定为模块主体。引入了declare global语法,以便从模块中修改 ambient 全局范围。

因为它现在是一个模块,它还会更改文件中任何代码其他代码的语义,因此我建议您将其移出 vendor.d.ts

例如,您可以创建一个名为 augmentations.d.ts 的文件,并将其放在项目的根目录中。