ドキュメントの代わりにモデルのインターフェイスのみをエクスポートして、自分のクラスメソッド内にモデルがない場合、誰もモデルを変更できないようにします。Mongoose + Typescript - >モデルインターフェイスのエクスポート
た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と、基本的に私のモデルを更新するためのすべてのメソッドを持つクラスUserです。
問題は、そうでない場合、私はのUserDocumentを渡す必要があります、私は私のインターフェイスに_idを追加し、私は実際にそれを必要とする場合typescriptですが文句を言っていることであり、それは私がやってみたかっなかったものです。エラータイプスクリプトが私に与えるもの:
エラーTS2320: 'UserDocument'インターフェイスは、 'IUser'と 'Document'タイプを同時に拡張できません。 タイプ 'IUser'と 'Document'の名前付きプロパティ '_id'は同一ではありません。
どのようにすれば私のインターフェイスに_idプロパティを追加できますか?
ありがとうございます!
Mongooseの '_id'は、デフォルトで' ObjectId'( 'mongoose.Schema.Types.ObjectId')型です。 – robertklep
こんにちは@robertklep、私はすでに文字列の代わりにそれを試して、それは私に_idを置く場合にのみ、私に同じエラーを与えます:それは不平を停止しますが、それは理想的ではありません。 – asheinfeld
あまりにも悪い:(私はTSを全く経験していないので、それ以上あなたを助けることはできません。 – robertklep