带有打字稿的节点js:定义接口时猫鼬模式日期类型属性出错

Node js with typescript: Error in mongoose schema date type property when defining an interface

我有一个如下所示的猫鼬模式:

import mongoose from 'mongoose';
const { Schema } = mongoose;

const tourSchema = new Schema<ITour>({
  name: String,    
  price: {
    type: Number,
    default: 0,
  },
  description: {
    type: String,
    trim: true,
  },
  createdAt: {
    type: Date,
    default: Date.now(),
    select: false,
  },
  startDates: [Date],
});

export const Tour = mongoose.model("Tour", tourSchema);

还有一个我要添加到架构中的接口:

interface ITour extends mongoose.Document{
  name: string;
  price: number;
  description: string;
  createdAt: Date;
  startDates: Date[];
}

当我向 属性 添加“默认值”属性 时,在创建的 属性 中出现类型错误。当我删除默认 属性 时,一切正常。 createdAt 的类型是 DateConstructor,Date.now() 的 return 类型是一个数字。我该如何解决这个问题?

您可以使用内置的时间戳选项 Schema.It 会自动将 createdAt 字段添加到您的架构中。 link

const tourSchema = new Schema<ITour>({
  name: String,    
  price: {
    type: Number,
    default: 0,
  },
  description: {
    type: String,
    trim: true,
  },
  {
    timestamps: true
  },
  startDates: [Date],
});