为什么我的MongoDB ObjectID不能在TypeScript中识别为类型?

时间:2018-12-30 01:01:05

标签: node.js mongodb typescript

我正在将Node.js与MongoDB和TypeScript结合使用。

以下两行代码:

const ObjectID = require("mongodb").ObjectID;
const id = new ObjectID("5b681f5b61020f2d8ad4768d");

编译没有错误。

但是当我将第二行更改为:

const id: ObjectID = new ObjectID("5b681f5b61020f2d8ad4768d");

我得到一个错误:

  

找不到名称“ ObjectID”

为什么ObjectID在TypeScript中不能识别为类型?

3 个答案:

答案 0 :(得分:6)

  1. yarn add @types/mongodb
  2. 使用导入import {ObjectID} from 'mongodb';

这足以使用ObjectID作为类型。

答案 1 :(得分:2)

即使安装了类型,typescript也不会正确键入require("mongodb").ObjectId。您需要将require用作导入的一部分:

import mongodb = require("mongodb");
const ObjectID = mongodb.ObjectID;
const id: mongodb.ObjectID = new ObjectID("5b681f5b61020f2d8ad4768d");

如果要坚持使用原始版本,则必须意识到您没有导入类型,而只是导入了构造函数。有时,类型和值具有相同的名称,并一起导入,以产生相同的错觉,但实际上,类型和值存在于不同的宇宙中。您可以声明关联的类型并从模块类型中获取它:

const ObjectID = require("mongodb").ObjectID;
type ObjectID= typeof import("mongodb").ObjectID;
const id: ObjectID = new ObjectID("5b681f5b61020f2d8ad4768d");

答案 2 :(得分:0)

对于新版本,请改为:

First Script associatedFiles Found associatedFiles Compiled <<$('#json').html() contents>> html.data.length:903 html.data.length:1354 html.data.length:180