node.js - Problem med Date og Mongoose Typescript
Jeg står overfor problemet med Mongoose offisielle dokument som finnes her.
import { Schema, Model, model } from 'mongoose';
export interface IUser {
name: string;
email: string;
avatar?: string;
created: Date;
}
const schema = new Schema<IUser, Model<IUser>, IUser>({
name: { type: String, required: true },
email: String,
avatar: String,
created: { type: Date, default: Date.now },
});
export const UserModel = model<IUser>('User', schema);
Mitt problem er at created-typen i IUser ikke er den samme som i schema og fikk feilen:
Type '{ type: DateConstructor; default: () => number; }' is not assignable to type 'typeof SchemaType | Schema<any, any, undefined, unknown> | Schema<any, any, undefined, unknown>[] | readonly Schema<any, any, undefined, unknown>[] | Function[] | ... 6 more ... | undefined'.
Types of property 'type' are incompatible.
Type 'DateConstructor' is not assignable to type 'Date | typeof SchemaType | Schema<any, any, undefined, unknown> | undefined'.
Type 'DateConstructor' is missing the following properties from type 'typeof SchemaType': cast, checkRequired, set, getts(2322)
(property) created?: typeof SchemaType | Schema<any, any, undefined, unknown> | Schema<any, any, undefined, unknown>[] | readonly Schema<any, any, undefined, unknown>[] | Function[] | ... 6 more ... | undefined
Vennligst gi meg beskjed om hvordan jeg kan fikse dette.
Svar #1
Date.now() er en funksjon som returnerer number. I stedet for den, prøv å bruke new Date() kun. Du må også gjøre endringer i typen til createdAt til Number.
I den gitte dokumentslenken er felttypen createdAt number, men her har du skrevet Date.
interface User {
name: string;
email: string;
avatar?: string;
createdAt: number;
}
ELLER
createdAt og updatedAt er tidsstempel som kan brukes direkte uten å spesifisere i skjemaet.
const schema = new Schema<IUser, Model<IUser>, IUser>({
name: { type: String, required: true },
email: String,
avatar: String
},{
timestamps: true
});
Svar #2
Jeg tror dette fungerer
import { Schema,Document } from 'mongoose';
export interface IUser {
name: string;
email: string;
avatar?: string;
created: Date;
}
const schema = new Schema<IUser>({
name: { type: String, required: true },
email: String,
avatar: String,
created: { type: Date, default: Date.now },
});
export const UserModel = model<IUser>('User', schema);
