【问题标题】:Mongoose $push typescript errorsMongoose $push 打字稿错误
【发布时间】:2020-08-01 13:40:26
【问题描述】:

似乎使用 mongoose 或 @types/mongoose 进行的某些软件包升级现在会导致来自 mongoose $push、$pull、$addToSet 和 $each 运算符的新打字稿错误。例如:

await User.findByIdAndUpdate(request.user._id, {
      $push: {
        mediaList: { $each: mediaIDs },
      },
    });

将鼠标悬停在我可以看到的 $each 上:

   Type 'string[]' is not assignable to type 'never'.ts(2322)

我在使用其他运算符时也遇到了同样的问题(类型“无论给定类型”不能分配给从不类型)。我想它也可能与 webpack 升级和 ts-loader 升级有关。我正在使用:

"@types/mongoose": "^5.2.4",
"mongoose": "^5.2.4",
"ts-jest": "^21.2.4",
"ts-loader": "4.1.0",
"ts-node": "^3.2.0",
"tslint": "^5.11.0",
"typescript": "^3.1.6",
"webpack": "^4.42.1",
"webpack-cli": "^3.3.11"

【问题讨论】:

  • 和我一样的问题。 prnt.sc/txvg8l你找到解决办法了吗?
  • 将 //@ts-ignore 添加到上面的行对我有用。我猜这不是真正的解决方案,但确实无法解决这个问题。
  • 是的,这有帮助,但我们正在失去这种方式的 TS 类型检查。另外我注意到这个问题只发生在 $inc 运算符上,所以如果我将上面的查询更改为 $set 它工作顺利。它肯定与@types/mongoose 有关,希望他们能在下一个版本中修复它。再次感谢您的帮助,我将使用它,因为使用 $inc 进行查询更简洁。

标签: typescript webpack mongoose ts-loader


【解决方案1】:

在上面的行中添加 //@ts-ignore 似乎可以使打字稿检查器平静下来,并且查询仍然有效。

【讨论】:

    【解决方案2】:

    我不确定这是否与您的问题相同,但我今天遇到了同样的问题,错误出在我对该字段的定义中。我的猫鼬文档中有以下内容。

    attachments?: AttachmentDocument["_id"]
    

    它应该在哪里:

    attachments?: AttachmentDocument["_id"][]
    

    由于它是一组文档,因此上述更改解决了我的问题。

    添加它作为帮助某人的答案,不确定它是否是问题的实际答案。

    【讨论】:

      【解决方案3】:

      也许检查你的节点版本。

      我遇到这个问题是因为我当前的本地节点版本不是package.json中设置的版本

      检查您是否在package.json 中指定了节点版本

      "engines": {
          "node": "^15.7.0"
      }
      

      删除node_modulespackage-lock.json

      rm -Rf node_modules package-lock.json
      

      设置正确的节点版本

      echo "v15.7.0" > .nvmrc
      nvm install
      nvm use
      

      最后重新安装包

      npm install
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2018-06-05
        • 2021-08-11
        • 1970-01-01
        • 2019-01-24
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多