mongoose
mongoose copied to clipboard
Document does not type non-default timestamp property names
Prerequisites
- [x] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported
Mongoose version
6.8.0, 7.0.3
Node.js version
16.17.0
MongoDB server version
5.0.14
Typescript version (if applicable)
4.8.4
Description
Builds on earlier issue #12069 where Document
and InferSchemaType
does not infer timestamp fields into Typescript types.
Renamed timestamp fields are not extracted using Document
and InferSchemaType
.
Steps to Reproduce
import { Schema, InferSchemaType, Document } from 'mongoose';
const MySchema = new Schema({
username: String,
}, {
timestamps: {
createdAt: "date_joined",
updatedAt: false,
},
});
export type MyType = Document & InferSchemaType<typeof MySchema>;
Expected Behavior
We expect MyType
to be:
type MyType = {
username: String,
date_joined: Date,
};
We get:
type MyType = {
username: String,
};

Note how not even createdAt
is on the type. Looking at the actual Document, we will see a type that looks like our expected type (with username, date_joined, and no updatedAt field).
We'll add support for this in the future. But, in the meantime, I recommend you add date_joined
to your schema manually as follows.
const MySchema = new Schema({
username: String,
date_joined: Date,
}, {
timestamps: {
createdAt: "date_joined",
updatedAt: false,
},
});
The way I added my timestamps is as follows:
const MySchema = new Schema({ username: String, date_joined: Date, }, { timestamps: true });