DocumentType<T, QueryHelpers>
Type DocumentType
Typings:
type DocumentType<T, QueryHelpers = BeAnObject>
Parameters:
| Name | Type | Description | 
|---|---|---|
| TRequired | object | The Class to get a document of | 
| QueryHelpers | QueryHelpers | Add Query Helpers to the type | 
The Type DocumentType<T> is the type used for Documents.
This type is the logical AND of mongoose.Document and T.
With this type, typeof Class cannot be used.
If the current project's tsconfig also includes compilerOptions.lib with dom, then the types from Typegoose and Typescript will conflict.
Solution is to remove dom from the lib array.
Example:
class Kitten {
  @prop()
  public name?: string;
  // this is an Instance Method
  public getName(this: DocumentType<Kitten>) {
    return this.name; // thanks to "DocumentType" "this" has type information
  }
}
Helper Type SubDocumentType
Typings:
type SubDocumentType<T, QueryHelpers = BeAnObject>
Parameters:
| Name | Type | Description | 
|---|---|---|
| TRequired | object | The Class to get a document of | 
| QueryHelpers | QueryHelpers | Add Query Helpers to the type | 
The Type to use for subdocuments, when extra functions like .parent or document functions are necessary.
This type is a logical AND of DocumentType and mongoose.Types.SubDocument
Example:
class Place {
  @prop()
  public name?: string;
}
class Cat {
  @prop({ type: () => Place })
  public favoritePlace!: SubDocumentType<Place>;
}
const CatModel = getModelForClass(Cat);
const catdoc = new CatModel({ favoritePlace: { name: "countertop" } })
catdoc.favoritePlace.parent() === catdoc;
Helper Type ArraySubDocumentType
Typings:
type ArraySubDocumentType<T, QueryHelpers = BeAnObject>
Parameters:
| Name | Type | Description | 
|---|---|---|
| TRequired | object | The Class to get a document of | 
| QueryHelpers | QueryHelpers | Add Query Helpers to the type | 
The Type to use for subdocuments in arrays, when extra functions like .parent / .parentArray or document functions are necessary.
This type is a logical AND of DocumentType and mongoose.Types.ArraySubdocument
Example:
class Place {
  @prop()
  public name?: string;
}
class Cat {
  @prop({ type: () => Place })
  public favoritePlaces!: ArraySubDocumentType<Place>[];
}
const CatModel = getModelForClass(Cat);
const catdoc = new CatModel({ favoritePlaces: [{ name: "countertop" }, { name: "printer" }]})
catdoc.favoritePlaces[0].parent() === catdoc;
catdoc.favoritePlaces[0].parentArray() === catdoc.favoritePlaces;