You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose6+TypeScript无法访问TableDocument的timestamps字段updatedAt如何解决

这个问题是两个原因导致的:

  1. 你的TableDocument类型定义没有显式声明createdAt、updatedAt字段,Mongoose默认的Document类型不会自动包含timestamps配置生成的字段
  2. create方法返回的是Mongoose Document实例,包含save()、populate()等原型方法,和你定义的纯数据结构的ResponseTable类型结构不匹配

步骤1:修正TableDocument类型定义

在你的TableDocument接口中显式添加timestamps相关字段:

import { Document } from 'mongoose';

interface TableDocument extends Document {
  createdBy: string;
  capacity: number;
  tableNumber: number;
  // 新增以下两个timestamps字段
  createdAt: Date;
  updatedAt: Date;
}

完成后你直接用const table: TableDocument = await this.tableSchema.create(...)声明的话,就可以正常访问table.updatedAt,不会报字段不存在的错误。

步骤2:转换为自定义ResponseTable类型

如果你需要把返回值转为纯数据结构的ResponseTable类型,不要直接赋值,调用Mongoose Document内置的toObject()方法转为普通JS对象后再赋值即可,这也是接口返回数据时的标准写法:

const tableDoc = await this.tableSchema.create({ ...createTableDto });
const table: ResponseTable = tableDoc.toObject();

如果你的ResponseTable字段和TableDocument完全匹配,也可以直接用类型断言:

const table = await this.tableSchema.create({ ...createTableDto }) as unknown as ResponseTable;

额外验证

确保你的Schema定义中已经开启了timestamps配置(你实际返回数据已经有该字段说明已经开启,这里做个校验即可):

const tableSchema = new Schema<TableDocument>(
  {
    // 你的业务字段定义
  },
  { timestamps: true }
)

内容的提问来源于stack exchange,提问作者Branchverse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:36:03