Mongoose6+TypeScript无法访问TableDocument的timestamps字段updatedAt如何解决
这个问题是两个原因导致的:
- 你的
TableDocument类型定义没有显式声明createdAt、updatedAt字段,Mongoose默认的Document类型不会自动包含timestamps配置生成的字段 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
相关产品推荐
相关产品推荐

