如何在Mongoose中使用流类型?

时间:2018-10-11 23:15:30

标签: mongoose flowtype

我一直在尝试将Flow与Mongoose(5.0.16)结合使用,到目前为止,还没有弄清楚如何为我的猫鼬模型获取实际有用的类型。我尝试按照示例here进行操作,但似乎已过时。一方面,导出的文档类型为MongooseDocument,而不是Mongoose$Document;对于另一种,当我尝试扩展MongooseDocument时:

import mongoose, { Schema } from "mongoose";
import type { MongooseDocument } from "mongoose";

const userSchema = new Schema(
  {
    email: { type: String, unique: true },
    password: String,
    ...
  }
);

export class UserDoc extends MongooseDocument {
  email: string;
  password: string;
  ...
}

userSchema.loadClass(UserDoc);
const User = mongoose.model < UserDoc > ("User", userSchema);
export default User

我收到流程错误Cannot reference type MongooseDocument [1] from a value position. 我已尝试将extends MongooseDocument替换为/* :: extends Mongoose$Document */,如上面链接的示例所示。这似乎可行,但实际上在使用该类型时仍然存在问题。

一方面,Flow似乎不确定Usermongoose.Model<UserDoc>还是UserDocUncertainFlow

另一方面,我无法弄清楚该模型在其他地方使用什么类型。我正在尝试定义一个包含所有模型的Models类型:

export type Models = {
  ...
  User: mongoose.Model<UserDoc>
};

但是当我这样做时,出现错误:typeof Mongoose$Document [1] is not a polymorphic type. 如果我将Models.User定义为UserDoc,那么它似乎只是被视为any类型,并且我没有得到任何有用的类型推断。 Class<UserDoc>得到相同的结果。

那么,我应该使用什么类型来引用我的User模型?

1 个答案:

答案 0 :(得分:0)

我认为,当您将类加载到架构中时,应该将类型自动传递给模型:pic1 结果如下:pic2