出现错误:表达式不可调用 Mongoose NextJS

Hai*_*iri 7 mongoose node.js typescript next.js

我试图将数据保存到 NextJS 页面上的猫鼬模型中。我在这一行收到打字稿错误:

await User.create(data)
Run Code Online (Sandbox Code Playgroud)

该表达式不可调用。联合类型的每个成员 '{ <Z = Document | _AllowStringsForIds<Pick<Pick<_LeanDocument<文档>, "_id" | “__v”| “id”>,“_id”| “__v”| “id">>>(文档:Z):承诺<...>;<Z = 文档<...> | _AllowStringsForIds<...>>(文档: Z[], 选项?: SaveOptions): Promise<...>; <Z = 文档<...> | _AllowStringsForIds<...>>(...docs: Z[]): Promis...' 有签名,但这些签名都不相互兼容。

该代码有效 - 我可以看到添加到数据库中的数据,但是

  1. 在 heroku 上部署失败并出现相同的错误
  2. 我也想清除 VSCode [Problems] 选项卡上的此错误(烦人)

这是我从用户模型中导出的内容:

export default  (mongoose.models.User || mongoose.model('User', UserSchema));
Run Code Online (Sandbox Code Playgroud)

rob*_*ash 11

虽然年纪有点大了,但还是留下我的感悟吧:

我遇到了同样的问题,发现我可以使其工作,而无需@ts-ignore显式给出mongoose.models.User与模式使用的相同类型。

export interface User {
  username: string;
  password: string;
}

const schema = new mongoose.Schema<User>(
  {
    username: {
      type: String,
      required: true,
    },
    password: {
      type: String,
      required: true,
    },
  }
);
    
export default (mongoose.models.User as mongoose.Model<User>) || mongoose.model('User', schema);
Run Code Online (Sandbox Code Playgroud)