我一直在尝试将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似乎不确定User
是mongoose.Model<UserDoc>
还是UserDoc
:
另一方面,我无法弄清楚该模型在其他地方使用什么类型。我正在尝试定义一个包含所有模型的Models
类型:
export type Models = {
...
User: mongoose.Model<UserDoc>
};
但是当我这样做时,出现错误:typeof Mongoose$Document [1] is not a polymorphic type.
如果我将Models.User
定义为UserDoc
,那么它似乎只是被视为any
类型,并且我没有得到任何有用的类型推断。 Class<UserDoc>
得到相同的结果。
那么,我应该使用什么类型来引用我的User
模型?