Ref<PopulatedType, RawId>
Typings:
type Ref<
  PopulatedType,
  RawId extends mongoose.RefType = PopulatedType extends { _id?: mongoose.RefType }
    ? NonNullable<PopulatedType['_id']>
    : mongoose.Types.ObjectId
>
Parameters:
| Name | Type | Description | 
|---|---|---|
PopulatedType Required | object | The Type of the what is expected when it is populated | 
RawId | mongoose.RefType | Overwrite the Reference type (the type of _id of PopulatedType) | 
The Type Ref<PopulatedType, RawId> is the type used for References.
PopulatedType: This is the Class being referenced.RawId: This should be the_idType of the referenced Class, by default itsmongoose.Types.ObjectIdand should get automatically inferred if a_idproperty is present on the target class.
There are typeguards to check if a reference is populated or of the reference type:
tip
For more and better explained examples, look at the Reference Other Classes Guide.
Example
Class to-be-referenced:
class Kitten {
  @prop()
  public name?: string;
}
Single Reference:
class Person {
  @prop({ ref: () => Kitten })
  public pet?: Ref<Kitten>;
}
Reference Array:
class Cat {
  @prop({ ref: () => Kitten })
  public babies?: Ref<Kitten>[];
}
Reference with different _id type:
class Kitten {
  @prop()
  public _id?: string;
  @prop()
  public name?: string;
}
// For Single References
class Person {
  // The "type" options in this case refers to the "_id" type of the referenced class, by default it will be "ObjectId"
  @prop({ ref: () => Kitten, type: () => String })
  public pet?: Ref<Kitten, string>;
}
// For a Array of References
class Person {
  // The "type" options in this case refers to the "_id" type of the referenced class, by default it will be "ObjectId"
  @prop({ ref: () => Kitten, type: () => String })
  public pet?: Ref<Kitten, string>[];
}