Я хочу экспортировать только документы моей модели вместо Документа, чтобы никто не мог модифицировать мою модель, если она не находится внутри собственных методов класса. Я определил интерфейс и схему так:Mongoose + Typcript -> Экспорт интерфейса модели
IUser:
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 и пользователь класса, который в основном имеет все методы для обновления моей модели.
Проблема заключается в том, что машинописный шрифт жалуется, если я добавляю _id в свой интерфейс, но на самом деле мне это нужно, иначе мне нужно будет передать UserDocument, и это то, чего я не хотел делать. Ошибка typescript дает мне:
ошибка TS2320: интерфейс UserDocument не может одновременно расширять IUser 'и' Document '. Именованное свойство «_id» типов «IUser» и «Document» не идентично.
Любые идеи, как я могу добавить свойство _id в свой интерфейс?
Спасибо!
'_id' в Mongoose по умолчанию является' ObjectId' ('mongoose.Schema.Types.ObjectId'). – robertklep
Привет @robertklep, я попробовал это уже вместо строки, и это дает мне ту же ошибку, только если я ставлю _id: любой он перестает жаловаться, но это не идеально. – asheinfeld
Слишком плохо :(У меня нет опыта работы с TS, так что я не могу вам больше бояться. – robertklep