【发布时间】:2016-10-21 22:37:41
【问题描述】:
我只想导出模型的接口而不是文档,这样如果模型不在它自己的类方法中,任何人都无法修改它。我已经定义了这样的接口和架构:
用户:
interface IUser {
_id: string;
name: string;
email: string;
created_at: number;
updated_at: number;
last_login: number;
}
还有架构:
let userSchema: Mongoose.Schema = new Mongoose.Schema({
'name': String,
'email': String,
'created_at': {'type': Date, 'default': Date.now},
'updated_at': {'type': Date, 'default': Date.now},
'last_login': {'type': Number, 'default': 0},
});
interface UserDocument extends IUser, Mongoose.Document {}
然后是模型
// Model
let Users: Mongoose.Model<UserDocument> = Mongoose.model<UserDocument>('User', userSchema);
所以我只导出 IUser 和一个基本上具有更新模型的所有方法的类 User。
问题是,如果我将 _id 添加到我的界面,打字稿会抱怨,但我确实需要它,否则我将需要传递 UserDocument,这就是我不想做的。打字稿给我的错误是:
错误 TS2320:接口“UserDocument”不能同时扩展类型“IUser”和“Document”。 “IUser”和“Document”类型的命名属性“_id”不相同。
任何想法如何将 _id 属性添加到我的界面?
谢谢!
【问题讨论】:
-
默认情况下,Mongoose 中的
_id类型为ObjectId(mongoose.Schema.Types.ObjectId)。 -
嗨@robertklep,我已经尝试过,而不是字符串,它给了我同样的错误,只有当我输入 _id: any 它停止抱怨,但这并不理想。
-
太糟糕了:(我对 TS 没有任何经验,所以恐怕无法进一步帮助你。
标签: node.js typescript mongoose