我正在 NestJS 中使用 Mongoose,并且遇到了有关下面给出的 user.schema.ts 文件中的时间戳的问题。 这里打字稿不知道createdAt,updatedAt。
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
interface TimeStamps {
createdAt: Date;
updatedAt: Date;
}
@Schema({ versionKey: false, timestamps: true })
export class User extends Document implements TimeStamps {
@Prop({ required: true })
firstName: string;
@Prop({ required: true })
lastName: string;
@Prop({ required: true, unique: true })
email: string;
@Prop({ required: true })
password: string;
@Prop({ enum: ['admin', 'user'], default: 'user' })
role: string;
}
export const UserSchema = SchemaFactory.createForClass(User);
这里我有一个错误:
“User”类错误地实现了“TimeStamps”接口。 类型“User”缺少类型“TimeStamps”中的以下属性:createdAt、updatedAt ts(2420)
我在 get-user.dto.ts 文件中使用时间戳来公开/允许它们发送到客户端。我想告诉打字稿有updatedAt和createdAt属性,但没有在模式中显式定义它们。我怎样才能做到这一点?
遵循此说明:
https://khajehossini.medium.com/nestjs-createdat-and-updatedat-in-schema-d1ad6cf525e0
在上面的帖子里,你可以看到你的答案。
我找到的解决方案是在架构选项中添加 timestamps true ,并添加 createdAt 和 updatedAt 作为架构属性。这样,猫鼬就会更新 updatedAt 属性本身。
@Schema({
versionKey: false,
timestamps: true,
validateBeforeSave: true,
validateModifiedOnly: true,
})
class User extends Document {
@Prop({ required: true })
firstName: string;
@Prop({ required: true })
lastName: string;
@Prop({ required: true, unique: true })
email: string;
@Prop({ required: true })
password: string;
@Prop({ enum: ['admin', 'user'], default: 'user' })
role: string;
@Prop({ default: Date.now })
createdAt: Date;
@Prop({ default: Date.now })
updatedAt: Date;
}