Replies: 1 comment
-
|
This is because you're turning off Mongoose's automatic type inference by passing the document interface as a generic to import { Schema } from 'mongoose';
/*interface Item {
name?: string;
}*/
const itemSchema = new Schema({
name: String,
});
/*interface Shop {
items: Item[];
}*/
const shopSchema = new Schema(
{
items: {
type: [itemSchema],
required: true,
},
},
{
virtuals: {
isFull: {
// get(): boolean {
// // this is `any` type
// return this.items.length > 15;
// },
get(): boolean {
const length: number = this.items.length;
return length > 15;
},
},
},
},
);If you want to continue passing in document interface, you would also need to pass in the virtual interface: import { Model, Schema } from 'mongoose';
interface Item {
name?: string;
}
const itemSchema = new Schema({
name: String,
});
interface Shop {
items: Item[];
}
interface ShopVirtuals {
isFull: boolean;
}
const shopSchema = new Schema<Shop, Model<Shop>, {}, {}, ShopVirtuals>(
{
items: {
type: [itemSchema],
required: true,
},
},
{
virtuals: {
isFull: {
get(): boolean {
const length: number = this.items.length;
return length > 15;
},
},
},
},
); |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Didn't find any information from typescript documentation.
The
thisis inferred to beanyinstead ofshopdocument. Currently, I have to specify the type forthisexplicitly. Is this the currently recommended way?mongoose: 7.4.0
typescript: ^5.1.6
Beta Was this translation helpful? Give feedback.
All reactions